Мне нужно отсортировать массив символов, чтобы перебрать его и распечатать уникальные точки данных и их количество. Этот массив содержится в узле связанного списка, и я хочу использовать qsort
для этого. К сожалению, я получаю segfault прямо на этой конкретной линии.
void printArray(Node_ptr node){
int count=0; //character count
char *temp= node->attributes; //duplicate attribute array
char cur; //current char
char *outputCat= emalloc(150); //concatenate counts to a single string
outputCat= "Attribute %d counts are: ";
qsort(&temp, lineCount, sizeof(char), compare); //sort the array
... more code
}
Я выбрал метод сравнения со страницы man qsort
int compare(const void *a, const void *b){
return strcmp(*(char * const *) a, *(char * const *) b);
}
В DDD строка qsort - это та, которая вызывает segfault. Первоначально я думал, что это связано с неточностями в параметрах, поэтому я добавил несколько отладочных операторов printf. printf("%s", temp)
распечатывает 1000 символов, что и должно быть. Символы - 1 байт каждый, поэтому здесь sizeof(char)
не требуется.
Сообщение об ошибке от DDD в этой строке:
Program received signal SIGSEGV, Segmentation fault.
0xb7f8c498 in ?? () from /lib/libc.so.6
Это ошибка qsort или что-то еще с моим кодом?