我已经编写了以下示例代码来演示我的问题。
#include <iostream>
#include <string.h>
using namespace std;
void f (char*** a)
{
*a = new (char*[2]);
*a[0] = new char[10];
*a[1] = new char[10];
strcpy(*a[0], "abcd");
strcpy(*a[1],"efgh");
}
int main ()
{
char** b = NULL;
f(&b);
cout<<b[0]<<"\n";
cout<<b[1]<<"\n";
return 1;
}
在这段代码中,我发现a = new (char[2]);没有为*a[1]分配内存。
在gdb中,我得到了以下的段错误。
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400926 in f (a=0x7fffffffdfe8) at array1.cpp:10
10 *a[1] = new char[10];
(gdb) p *a[1]
Cannot access memory at address 0x0
这真的让我很困惑。有人能解释一下我做错了什么吗?
我知道可以像这样传递参数:void f(char**& a),通过调用函数f(b)来实现,这个方法是可行的。但如果我使用char*** a会发生什么呢?它应该也可以工作。如果这是一个愚蠢的问题,那我很抱歉。
如果有任何关于上述问题的教程或参考资料,将不胜感激。
谢谢。
std::vector<std::string>
等... :) - Christian Hackl