就像下面的代码一样,intcmp1运行正常,但是intcmp得到了段错误。我不知道为什么。这两个代码看起来一样。为什么这个指针得到了分割错误C?
我的系统环境是:OS X 10.10.2 64bit;铛
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int intcmp(const void *v1, const void *v2){ //Segment Fault
return (*((int*)(*(int*)v1)) - *((int*)(*(int*)v2)));
}
int intcmp1(const void *v1, const void *v2){ //No Problem
return (**(int**)v1-**(int**)v2);
}
int main(int argc, char *argv[]) {
int a[5]={0,1,2,3,4};
int **b,i;
b=calloc(5,sizeof(int*));
for(i=0;i<5;i++){b[i]=&a[i];}
printf("cmp1 begin\n");
qsort(b,5,sizeof(int*),intcmp1);
printf("cmp1 end\n");
printf("cmp1 begin\n");
qsort(b,5,sizeof(int*),intcmp);
printf("cmp2 end\n");
}
是不是**((int**)a)
等于为*((int*)(*(int*)a))
?
为什么你会期望第一个版本的工作?你正在传递一个int **,但将其转换为int *。 – 2015-04-05 19:13:45
它们看起来如何? 'int *'不是'int **'。 – m0skit0 2015-04-05 19:18:17