Это моя функция сравнения:Сравнить Целую Функцию SIGSEGV
int compareInts(const void *a, const void *b) {
const int *pa = (const int*)a;
const int *pb = (const int*)b;
return *pa - *pb;
}
Когда я прохожу эту функцию, чтобы QSort вместе с массивом целых чисел:
qsort(a, size, sizeof(char*), compareInts);
Все прекрасно работает, и я получаю отсортированный список , Однако, если я пытаюсь использовать его сам:
compareInts(2, 2);
Я получаю SIGSEGV, если я не пересмотрит функцию следующим образом:
int compareInts(const void *a, const void *b) {
const int *pa = (const int*)a;
const int *pb = (const int*)b;
return pa - pb;
}
Который работает хорошо, когда я называю его, но при передаче QSort возвращает несортированный список! Что здесь происходит?
Третий параметр 'qsort()' - размер каждого элемента. Если вы фактически сортируете массив 'int', тогда третий параметр должен быть' sizeof (int) 'или, возможно,' sizeof (* a) '. – Blastfurnace
'2' НЕ является указателем, функция ожидает двух указателей. поэтому он считает, что «2» является указателем и рассматривает его как таковой. доступ к адресу 2, который выходит за пределы данных процесса, приводит к неопределенному поведению, приводящему к событию сбоя seg. Вторая версия программы - это сравнение указателей, а не то, на что указывают указатели. – user3629249