c - malloc() 导致循环中取消引用的二维字符数组崩溃

标签 c arrays windows icc

数组初始化为:

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/

相关文章:

windows - Windows 在哪里存储计划任务控制台的设置?

c++ - 用于检测 APIC id 的代码为不同的逻辑处理器返回相同的 id

c - 如何制作递归函数,将大写字母放在第一个字母和这个 '.' 字符之后

c - 如何在 C 的共享库中使用外部符号

c - 正确sscanf使用麻烦

javascript - Array.from 与新 Set

arrays - 比较两个具有相同长度的整数数组

python - numpy 将数组作为一个整体进行比较

c++ - 跨平台构建、标准目录结构、环境变量

iphone - bsd套接字连接超时iPhone