我需要创建一个字符串数组(动态)。 我发送一个指向函数指针的指针,但是在函数中我得到了错误。
这是功能:
void CheckFilesInFolder(char* pathOfFolder, char*** namesFiles);
我打电话给那样的功能:
char** namesFiles = NULL;
CheckFilesInFolder("Debug", &namesFiles);
在我执行malloc的函数中,当I = 1时,它会中断。
*namesFiles = (char**)malloc(*namesFiles, 10 * sizeof(char*) );
int i = 0;
for (i = 0; i < 10; i++)
{
*(namesFiles[i]) = (char*)malloc(MAX_FILE_NAME);
}
答案 0 :(得分:4)
malloc
只需要1 size_t
个参数。
改变这个:
*namesFiles = (char**)malloc(*namesFiles, 10 * sizeof(char*) );
到此:
*namesFiles = (char**)malloc(10 * sizeof(char*) );
让我知道可能发生的任何其他错误。
另外,如果你需要将指针传递给调用者,为什么不通过将指针的地址作为参数传递来返回它而不是获取它?
像这样:
char** CheckFilesInFolder(char* pathOfFolder);
并在函数中执行类似的操作:
char** namesFiles = (char**)malloc(10 * sizeof(char*) );
//(...)
return namesFiles;
要打电话,请执行以下操作:
char** namesFiles = CheckFilesInFolder("Debug");
我相信这是最好的方式。
编辑1.0 要回复“alk”中的注释,这里有一个解决这个问题的方法,通过参数指向char *数组而不是我的(更简单)建议返回char **:
像这样调用函数:
char** namesFiles;
CheckFilesInFolder("Debug", &namesFiles);
功能内部:
*namesFiles = (char**)malloc(10 * sizeof(char*));
int i;
for (i = 0; i < 10; i++)
(*namesFiles)[i] = (char*)malloc(MAX_FILE_NAME);
功能声明:
void CheckFilesInFolder(char* pathOfFolder, char*** namesFiles);
使用这个你真的需要使用参数来执行此操作,例如,如果要将此函数作为pthread的例程调用。