я получаю эту ошибку после того, как массив уже хранится несколько строк из пользовательского ввода, который говорит мне, что это, вероятно, повреждена память из-за линии:«перераспределить(): недействительный следующий размер» после нескольких успешных запусков
poemArray = (char **)realloc(poemArray, count + 1);
Любая идея, что я делаю неправильно? Конкретное решение было бы высоко оценено!
line = (char *)malloc(MaxLineLen);
fgets(line, MaxLineLen, stdin);
/*Get current line from user input*/
if(count == 0)
{
poemArray = malloc(sizeof(char *));
printf("1\n");
}
if(line[0] == '.'){
break;
}
line = (char *)realloc(line, strlen(line));
printf("2\n");
if(count != 0)
{
poemArray = (char **)realloc(poemArray, count + 1);
}
poemArray[count] = line;
++count;
Возможно, вы, скорее всего, прочитали в конце строки 'line'; 'realloc (строка, strlen (строка))' отключает нулевой ограничитель, поэтому нет способа, которым более поздний код может знать, когда прекратить чтение –
'line = (char *) realloc (строка, строка (строка));' бессмысленная линия. Возьмите длину строки, которая уже есть * и *, затем * выделите для нее пространство? Что, что? –
А, я вижу, вы * уменьшаете * выделение для строки. В этом случае вы забыли «+ 1» для оканчивающегося нуля на всех строках C. –