试图效仿这的例子。(分段字符串排序.)
有什么明显的东西会使stdlib的qsort.c崩溃吗?
我还尝试了使用strncmp来指定30个字符的最大值,这比我所做的要多得多。
*文件seems 20似乎正确地填充了字符串。
谢谢。
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.cqsort比较函数:
/* 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 */
}发布于 2009-08-27 18:29:06
您说您只使用10个字符串填充fileArray,留下10个条目未初始化。
当您调用qsort时,您传递20作为strings_len参数。当然,这将导致未定义的行为。
你必须给出准确的q排序信息.
如果要在数组中传递10个字符串,还必须将数字10作为要排序的元素数传递。
注意:如果您按照我前面的答案,在cstring_cmp上设置一个断点,您将很快看到在调用无效数据时调用比较方法的情况,这将直接导致崩溃。
发布于 2009-08-27 18:03:32
你如何填充:
char* fileArray[20];目前,它是一组未初始化的指针。
发布于 2009-08-27 18:11:01
在cstring_cmp中设置一个断点,每次都要观察它的名称。
看看最终崩溃是发生在cstring_cmp内部还是在qsort中。在坠机前检查fileArray的状态。
https://stackoverflow.com/questions/1342762
复制相似问题