首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用qsort的Segfault

使用qsort的Segfault
EN

Stack Overflow用户
提问于 2011-09-12 07:10:27
回答 2查看 1.6K关注 0票数 0

我需要对一个字符数组进行排序,以便对其进行迭代,并打印出唯一的数据点及其计数。这个数组保存在一个链表节点中,我想使用qsort来完成此操作。不幸的是,我在这一特定的行上得到了一个段错误。

代码语言:javascript
复制
void printArray(Node_ptr node){

    int count=0; //character count

    char *temp= node->attributes; //duplicate attribute array



    char cur; //current char

    char *outputCat= emalloc(150); //concatenate counts to a single string

    outputCat= "Attribute %d counts are: ";



    qsort(&temp, lineCount, sizeof(char), compare); //sort the array

    ... more code
}

我从man qsort页面中抄袭了compare方法

代码语言:javascript
复制
int compare(const void *a, const void *b){

  return strcmp(*(char * const *) a, *(char * const *) b);

}

在DDD中,qsort行是触发段错误的行。我最初认为这是由于参数中的错误,所以我放入了一些调试printf语句。printf("%s", temp)打印出1000个字符,这正是linecount应该输出的字符。每个字符是1个字节,所以这里不需要sizeof(char)

在该行上来自ddd错误报告是

代码语言:javascript
复制
Program received signal SIGSEGV, Segmentation fault.    
0xb7f8c498 in ?? () from /lib/libc.so.6

这是qsort的错误,还是我的代码出了什么问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-12 07:19:46

代码语言:javascript
复制
qsort(&temp, lineCount, sizeof(char), compare);

应该是:

代码语言:javascript
复制
qsort(temp, lineCount, sizeof(char), compare);

您不需要传递指针的地址!

qsort的第一个参数是一个指针,所以如果你给它传递一个指针,你不需要使用address-of操作符,否则你就是在传递一个指向指针的指针,在本例中这不是你想要的。

票数 4
EN

Stack Overflow用户

发布于 2011-09-12 07:18:33

如果要对字符进行排序,qsort()的第一个参数应该是字符指针,而不是指向字符指针的指针。strcmp()也是如此

另外:请添加struct node的定义。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7381905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档