指向C中参数的指针

时间:2016-05-14 11:45:56

标签: c function pointers parameters malloc

我需要创建一个字符串数组(动态)。 我发送一个指向函数指针的指针,但是在函数中我得到了错误。

这是功能:

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);
}

1 个答案:

答案 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的例程调用。