【发布时间】:2011-03-08 04:03:16
【问题描述】:
我在 C 中为我的 qsort 提供了这个比较器功能,但无论我尝试什么,我似乎都遇到了分段错误...
int textCompare ( const void * a, const void * b ){
const char **x =(const char**)a;
const char **y =(const char**)b;
return strcmp(*x, *y);
}
这是我的 qsort 调用:其中 message** mList = malloc(INITIAL_CAPACITY * sizeof(message)); 和 count 是跟踪最后一个元素的整数。 message 只是一个 typedef 结构,它包含一个 int 和一个指向 char 的指针。我有 67% 的把握正确调用 qsort,谁能指出我正确的方向?
qsort (*mList, count, sizeof(message), textCompare);
[编辑] 我声明 message*** 而不是 message* 的原因是因为我试图初始化一个指向结构的指针“数组”;除非我走错路了?
【问题讨论】:
-
由于消息显然不是指向 char 指针的指针,因此问题可能在于您的比较器应该比较消息结构而不是指向字符串的指针。此外,您的内存分配在 LHS 上的星号太多或在 RHS 上的大小错误。或者,也许,mList 是您的函数的参数,但是分配行具有误导性;你会做
*mList = malloc(INITIAL_CAPACITY * sizeof(message));。 -
我声明 message*** 而不是 message* 的原因是因为我试图初始化一个指向结构的指针“数组”;除非我走错路了?