Вы правильно распределяете память для каждой строки в массиве, но тогда вы не используете эту память.Вместо этого вы изменяете указатели char*
в каждом из пяти элементов массива, чтобы указывать на строковые литералы "a", "b", "c" и т. Д.
Итак, вы потеряли ссылки наисходная память, которую вы распределили, и вместо этого вы пытаетесь освободить память, которая не принадлежит вам.
Вместо назначения строковых указателей, таких как:
letters[0] = "a";
, вы должны копироватьстрока в памяти, которую вы распределили, как это:
strncpy(letters[0], "a", 2);