数组初始化为:
char** aldos = NULL;
char** aldoFilenames = NULL;
函数定义为:
int readFilesFromDirectory(char*** dest, char*** nameDest)
通过以下方式传递给函数:
readFilesFromDirectory(&aldos, &aldoFilenames);
统计文件数后,dest和nameDest被初始化:
*dest = (char**)malloc(sizeof(char*)*count);
*nameDest = (char**)malloc(sizeof(char*)*count);
count = 0; //resetting to read in the files again
nameDest 的第一个文件名的读取方式如下:
*nameDest[count] = (char*) malloc(sizeof(char)*strlen(findData.cFileName) + 1);
strcpy(*nameDest[count], findData.cFileName);
//can confirm in my program, the value exists properly in *nameDest[count]
count++;
这就是问题所在,当我将其放入循环中时,它崩溃了(没有真正有用的错误代码):
while (FindNextFile(hfind, &findData) != 0)
{
*nameDest[count] = (char*) malloc(sizeof(char)*strlen(findData.cFileName) + 1); //doesnt make it past here, CRASH
sprintf(*nameDest[count],"%s\0",findData.cFileName);
count++;
}
如有任何见解,我们将不胜感激,如果需要,我会很快添加更多信息
最佳答案
在*nameDest[count]
中,the indexing operator place before the dereference operator ,使代码等效于 *(nameDest[count])
,这不是您想要的,因为 nameDest
指向数组。您需要在数组索引之前使用括号进行指针取消引用:(*nameDest)[count]
我还应该注意,为目录列表轮询操作系统两次 - 一次为计数,一次为实际名称 - 是不可靠的,因为在两次轮询之间,计数可能已更改。当您找到更多条目时,请考虑使用 realloc
调整数组大小。
关于c - malloc() 导致循环中取消引用的二维字符数组崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33656276/