Итак, я работаю над программой, в которой функция читает из stdio, и продолжает читать символы в строках n символов.ошибка сегментации qsort
До сих пор я получил это, чтобы все хранилось в массиве символов, называемом буфером. Для следующего шага мне нужно отсортировать каждый фрагмент из n символов. Например, строка cats/ndogs/n должна быть разделена как cats/n dogs/n, если n = 5, а затем qsort()
необходимо ее в алфавитном порядке. Это, как я звоню qsort()
:
qsort (buffer, (line-2)*n*(sizeof(char)),n,compare);
Где (line-2)*n*sizeof(char)
дает общее количество элементов в буфере массива; 10 в этом случае.
Это моя функция сравнения:
int compare (const void * a, const void * b)
{
return (strcmp(*(char **)a, *(char **)b));
}
Когда я запускаю это, однако, я всегда получаю ошибку сегм в strcmp()
. Любые идеи почему?
Это код загрузки:
while (!feof(stdin))
{
for (i = 0; i < n; i++)
{
char l = getchar();
if (l != EOF)
{
if ((i == 0) && (line != 1))
{
success = (int *)realloc(buffer, line*n*(sizeof(char)));
}
buffer[(n*(line-1))+i] = l;
}
}
line = line + 1;
}
Этот код загрузки (который должен * действительно быть в вопросе) выглядит сильно сломанным; вам нужно * использовать * возвращаемое значение 'realloc()': это ваш новый 'buffer'! – unwind
Ваш 'char l = getchar();' является незначительной катастрофой; 'getchar()' возвращает 'int', а не' char'. Если символы без знака, тест EOF никогда не будет правдой. Если символы подписаны, вы получите фиктивный EOF при чтении символьного кода 0xFF (часто U + 00FF, ÿ, LATIN SMALL LETTER Y WITH DIAERESIS или y-umlaut, в частности, на турецком языке). Это _good_, что вы сохраняете возвращаемое значение из 'realloc()' в новой переменной. Это ** плохо **, что вы не проверяете отказ в распределении памяти, и это ** плохо **, что вы не используете новое значение вместо старого. Использование 'realloc()' может перемещать вашу память. –
1) что такое строка 2) ваше использование feof() нецелесообразно 3) casting malloc() et.al is unwanted 4) realloc() указатель на указатель int - это волшебство! 5) что происходит? 6) sizeof (char) равен 1, по определению. 7) что такое буфер? 8) что сказал Джонатан о персонаже и EOF. – wildplasser