Segfault с использованием qsort - PullRequest
       28

Segfault с использованием qsort

0 голосов
/ 12 сентября 2011

Мне нужно отсортировать массив символов, чтобы перебрать его и распечатать уникальные точки данных и их количество. Этот массив содержится в узле связанного списка, и я хочу использовать 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 или что-то еще с моим кодом?

Ответы [ 2 ]

4 голосов
/ 12 сентября 2011

Это

qsort(&temp, lineCount, sizeof(char), compare);

Должно быть:

qsort(temp, lineCount, sizeof(char), compare);

Вам не нужно передавать адрес указателя!

qsort Первый аргумент - это указатель, поэтому, если вы передадите ему указатель, вам не нужно использовать оператор address-of, иначе вы передаете указатель на указатель, а это не то, что вы хочу в этом случае.

2 голосов
/ 12 сентября 2011

Если вы хотите отсортировать символы, первым аргументом qsort () должен быть указатель на символ, а не указатель на символьный указатель.То же самое для strcmp ()

Также: пожалуйста, добавьте определение для struct node.

...