0

这段代码给了我运行时异常:Unhandled exception at 0x00401189 in ControlFileChanges.exe: 0xC0000005: Access violation writing location 0xbaadf00d在第一个 strcpy 命令。

char** withStrings(string s1, string s2, string s3, string s4, string s5)
{
char** pipes;
pipes = (char**) malloc(sizeof(*pipes)*5);

strcpy(pipes[0],s1.c_str());
strcpy(pipes[1],s2.c_str());
strcpy(pipes[2],s3.c_str());
strcpy(pipes[3],s4.c_str());
strcpy(pipes[4],s5.c_str());

return pipes;
}

知道问题可能是什么吗?(这是我在实际代码中使用类似逻辑的示例)。

4

3 回答 3

7

您没有将内存分配给pipes[0],pipes[1]等。

由于这是 C++ 而不是 C,您是否考虑过使用new而不是malloc?或者也许使用 avectorstrings ?

于 2012-07-31T07:18:38.600 回答
2

常数0xbaadf00d在这里告诉我们很多。这表明您使用的是 Microsoft,您已在调试模式下分配了一些堆内存并且没有对其进行初始化。

您可以看到这一点 - 您已经调用malloc()了. 也就是说,since是一个指向指针的指针,它只分配你指向指针的指针,而不是它们指向的任何东西。char**char*strcpychar**char**

如果可以的话,我建议完全避免使用 C 字符串。

于 2012-07-31T07:19:59.703 回答
0

char** pipes;- 是一个指针数组,它将存储 5 个字符串的地址。因此,您已在以下语句中分配内存用于存储 5 个字符串的地址。

管道 = (char**) malloc(sizeof(*pipes)*5);

在此之后,您必须分配内存来存储每个字符串。因此,如下所示更新您的代码。

#define MAX_NO_STRING 5
#define MAX_STR_SIZE 50

pipes = (char**) malloc(sizeof(char*)*MAX_NO_STRING); 
for(i = 0; i < MAX_NO_STRING; i++)
{
    pipes[i] = (char*)malloc(sizeof(char) * MAX_STR_SIZE);
}

注意:注意 malloc 的 NULL 检查

于 2012-07-31T10:29:18.037 回答