gpt4 book ai didi

c - 使用 qsort 的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:45:17 25 4
gpt4 key购买 nike

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

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 页面抄袭了比较方法

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 在该行的错误报告是

Program received signal SIGSEGV, Segmentation fault.    
0xb7f8c498 in ?? () from /lib/libc.so.6

这是 qsort 的错误,还是我的代码有其他问题?

最佳答案

这个

qsort(&temp, lineCount, sizeof(char), compare);

应该是:

qsort(temp, lineCount, sizeof(char), compare);

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

qsort 的第一个参数是一个指针,所以如果你传递一个指针,你不需要使用 address-of 运算符,否则你传递的是一个指向指针的指针,在这种情况下,这不是您想要的。

关于c - 使用 qsort 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7381905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com