首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >qsort崩溃程序-C

qsort崩溃程序-C
EN

Stack Overflow用户
提问于 2009-08-27 18:00:26
回答 5查看 1.1K关注 0票数 2

试图效仿的例子。(分段字符串排序.)

有什么明显的东西会使stdlib的qsort.c崩溃吗?

我还尝试了使用strncmp来指定30个字符的最大值,这比我所做的要多得多。

*文件seems 20似乎正确地填充了字符串。

谢谢。

代码语言:javascript
复制
char* ptr_fileName;  
char* fileArray[20];//number of files  
size_t strings_len;  

ptr_fileName = (char*)malloc((strlen(FindFileData.cFileName)+1)*sizeof(char));
memcpy(ptr_fileName, FindFileData.cFileName, strlen(FindFileData.cFileName)+1);
fileArray[i] = ptr_fileName;



strings_len = sizeof(fileArray) / sizeof(char *);          
qsort(fileArray, strings_len, sizeof(char *), cstring_cmp);   
//crashing in qsort.c

qsort比较函数:

代码语言:javascript
复制
/* qsort C-string comparison function */
    int cstring_cmp(const void *a, const void *b)
    {
        const char **ia = (const char **)a;
        const char **ib = (const char **)b;
        return strcmp(*ia, *ib);
        /* strcmp functions works exactly as expected from
        comparison function */
    }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-08-27 18:29:06

您说您只使用10个字符串填充fileArray,留下10个条目未初始化。

当您调用qsort时,您传递20作为strings_len参数。当然,这将导致未定义的行为。

你必须给出准确的q排序信息.

如果要在数组中传递10个字符串,还必须将数字10作为要排序的元素数传递。

注意:如果您按照我前面的答案,在cstring_cmp上设置一个断点,您将很快看到在调用无效数据时调用比较方法的情况,这将直接导致崩溃。

票数 4
EN

Stack Overflow用户

发布于 2009-08-27 18:03:32

你如何填充:

代码语言:javascript
复制
char* fileArray[20];

目前,它是一组未初始化的指针。

票数 2
EN

Stack Overflow用户

发布于 2009-08-27 18:11:01

在cstring_cmp中设置一个断点,每次都要观察它的名称。

看看最终崩溃是发生在cstring_cmp内部还是在qsort中。在坠机前检查fileArray的状态。

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

https://stackoverflow.com/questions/1342762

复制
相关文章

相似问题

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