就像下面的代碼一樣,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