Я пишу программу, и в своей программе мне нужно скопировать информацию из 1-го массива 1D в 2D-массив, но каждый раз, когда в массиве 1n находится массив \ n, он предполагает перейти в разные слоты в 2D-массиве. Например, если массив 1D равен Hello \ nWorld в массиве 2d он станет привет/n в первом слоте и мир во втором слоте.Сбой сегментации 2D-массива
Вот мой код Но я получаю ошибку сегментации. Массив, называемый символами, уже сделан в моей программе до этого шага.
words = (char**) malloc(numWords*sizeof(char));
int copyCountForChars=0;
int copyCountForWords=0;
while(copyCountForWords <= numWords)
{
words[copyCountForWords][copyCountForChars] = chars[copyCountForChars];
// printf("%c",chars[copyCountForChars]);
if(chars[copyCountForChars] == '\n')
{
// printf("%c",chars[copyCountForChars]);
copyCountForWords++;
}
copyCountForChars++;
}
Вы пренебрегали выделение памяти для этой последовательности указателей numWords, которые вы указали в первой строке кода. Обе разыменовывают их (записывают или читают, не имеют значения) и даже * оценивая *, они вызывают неопределенное поведение. ([OT: не бросать 'malloc' в код C] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc?s=1|6.6202). – WhozCraig
На самом деле, Numwords объявлено ранее в моем коде, извините. Numwords - это просто количество слов, которое содержит массив 1D – user1335175
Фактически этот factoid имеет * ничего *, чтобы сделать с моим комментарием, прочитайте его снова. Вы изначально выделяете последовательность * * указатели **. Указатели, которые вы выделили, сами являются ** неопределенными **, они указывают на неизвестность, неопределенные, большие запредельные. Им не назначены действительные адреса. Развертывание этих указателей вызывает * неопределенное поведение *. каждый указатель указывает на * что-то * действительное, возможно, другое распределение на. – WhozCraig