我有以下代码
#include <stdlib.h>
#include <stdio.h>
int sorter( const void *first_arg,const void* second_arg){
int first=*(int *) first;
int second =*(int*) second;
if (first<second){
return -1;
}
else if ( first==second){
return 0;
}
else{
return 1;
}
}
int main(){
int arr[10];
int i;
/*
fill the array
*/
int t=sizeof(arr)/sizeof(arr[0]);
for (i=0;i<t;i++){
arr[i]=t-i;
}
qsort(arr,t,sizeof(int),sorter);
for (int i=0;i<t;i++){
printf("%d\n",arr[i]);
}
}
但这是运行时错误 根据我的跟踪调整
first -858993460 int
first_arg 0x0015f738 const void *
second -858993460 int
second_arg 0x0015f74c const void *
也
> sorter_include.exe!sorter(const void * first_arg, const void * second_arg) Line 4 + 0x20 bytes C++
msvcr100d.dll!qsort(void * base, unsigned int num, unsigned int width, int (const void *, const void *)* comp) Line 151 + 0xb bytes C
sorter_include.exe!main() Line 31 + 0x17 bytes C++
sorter_include.exe!__tmainCRTStartup() Line 555 + 0x19 bytes C
sorter_include.exe!mainCRTStartup() Line 371 C
kernel32.dll!77911174()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
ntdll.dll!779fb3f5()
ntdll.dll!779fb3c8()
请帮助
答案 0 :(得分:3)
这是忽视变量名称问题的其中一个。
您需要更改:
int first=*(int *) first;
int second =*(int*) second;
到
int first=*(int *) first_arg;
int second =*(int*) second_arg;
在分拣机功能的开头。
答案 1 :(得分:2)
int sorter( const void *first_arg,const void* second_arg){
int first=*(int *) first_arg;
int second =*(int*) second_arg;
if (first<second){
return -1;
}
*first
或*second
是一个荒谬的错字 - 你需要使用args。
答案 2 :(得分:1)
int first=*(int *) first;
int second =*(int*) second;
我认为你的意思是
int first=*(int *) first_arg;
int second =*(int*) second_arg;