快速排序问题
我使用 C 库中的 qsort,并且有数据类型
Element_type **pElement and Element_type is struct typedef element_type {int ,char ....}
示例,并且我使用回调函数调用快速
qsort(*pElement,iCountElement,(size_t)sizeof(Element_type),compare);
排序函数
static int compare(const void *p1, const void *p2) {
Element_type *a1 = (Element_type *)p1;
Element_type *a2 = (Element_type *)p2;
return ( (a2)->iServiceId < (a1)->iServiceId );
}
,但我总是遇到分段错误。为什么?
I use qsort from C libary and I have datatype
Element_type **pElement and Element_type is struct typedef element_type {int ,char ....}
example, and i call quicksor function with
qsort(*pElement,iCountElement,(size_t)sizeof(Element_type),compare);
and callback function
static int compare(const void *p1, const void *p2) {
Element_type *a1 = (Element_type *)p1;
Element_type *a2 = (Element_type *)p2;
return ( (a2)->iServiceId < (a1)->iServiceId );
}
but I always get segmentation fault. Why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您的比较函数应通过分别返回负值、零或正值来返回 elem1 是否小于、等于或大于 elem2。
此外,如果您想要对
Element_Type
数组进行排序,那么您可以将void*
转换为Element_Type*
类型。如果您尝试排序的元素是Element_Type*
,那么您可以将 void* 转换为Element_Type**
。如果您尝试排序的项目属于
Element_Type*
类型,请确保为每个项目分配内存,然后在调用 qsort 之前为每个项目进行初始化。Your compare function should return whether elem1 is considered less than, equal to, or greater than elem2 by returning, respectively, a negative value, zero or a positive value.
Also if you want to sort for example an array of
Element_Type
then you would cast thevoid*
to typeElement_Type*
. If your elements that you are trying to sort areElement_Type*
then you would cast the void* toElement_Type**
.If the items you are trying to sort are of type
Element_Type*
the make sure you are allocating memory for each of those items and then initialized for each item before calling qsort.您应该调用 qsort(pElement, ...),而不是 qsort(*pElement, ...)。您帖子顶部的 pElement 声明可能不准确。
You should call qsort(pElement, ...), not qsort(*pElement, ...). The pElement declaration at the top of your post cannot be accurate.
像这样调用 qsort:
稍后编辑: 给我们一段代码,以便我们可以看到更多问题(如果是这种情况)
Call qsort like this:
LATER EDIT: give us a piece of code so we can see more problems if that's the case
这是纠正比较函数的最简单方法:
我无法读取第一个代码段,因此我不会对您的段错误提出建议。
This is the easiest way to correct your compare function:
I can't read the first code segment, so I won't make suggestions on your segfault.