С программирование, ошибка сегментации при манипулировании строками - PullRequest
0 голосов
/ 31 марта 2019

У меня есть массив строк, определенный как массив указателей на строку следующим образом

char* dict[50];
dict[0][0]= 0;
printf("%d", dict[0][0]);

// Это дает ошибку сегментации, может кто-нибудь объяснить, почему так?Также, если я поставлю dict [0] = 0, это будет то же самое, что и dict [0] [0] = 0

Ответы [ 2 ]

3 голосов
/ 31 марта 2019

Причина в том, что вы не распределили память. char* dict[50] представляет собой массив из 50 элементов с указателями на символы: если эти указатели не были указаны в действительной памяти, запись в них является неопределенным поведением и часто приводит к падению вашей программы или, что еще хуже.

2 голосов
/ 31 марта 2019

У вас есть массив из 50 указателей, ни один из которых не инициализирован.

Выполнение dict[0]=0 устанавливает первый элемент массива на указатель NULL.

Выполнение dict[0][0]=0 разыменованиянеинициализированный указатель или, если вы уже сделали dict[0]=0, разыменовывает указатель NULL.

...