char **数组在C ++中给出了Segmentation错误

时间:2013-12-02 03:51:43

标签: c++ c

我有点卡住了。看来,仅仅声明char **数组就存在分段错误。

以下是我的代码的确切顺序:

printf("%d\n", size_of_array);
char** array;
printf("hello");
array = (char**)malloc(sizeof(char*)*size_of_array);

这给出了以下结果:

18 //my calculated size_of_array
Segmentation Fault

如你所见,你好不输出,因此我的困惑。

此外,我也尝试过声明:

array = new char*[size_of_array]; 

我并不假装是C / C ++中最好的,但这个绝对令我感到困惑。另外(如果值得注意),我正在使用g ++编译linux机器。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

我认为您的错误必须源自代码中的其他位置,高于您发布的内容。

我刚跑了这个:

// I added the line below to define size_of_array since you left out that code: 
int size_of_array = 18;

然后你的代码:

printf("%d\n", size_of_array);
char** array;
printf("hello");
array = (char**)malloc(sizeof(char*)*size_of_array);

运行正常并输出:

18
helloProgram ended with exit code: 0

请注意,您在第二个printf()中停止了换行符'\ n',但这不是您的错误。

此外,您不应该使用read more about here来投射malloc(但不是错误的来源),只需使用:

array = malloc(sizeof(char*)*size_of_array);

但是,在C ++中需要强制转换(希望这不会太混乱),但你没有说,但是你想要C或C ++吗?你标记了两个,顺便说一下你的C ++行:

array = new char*[size_of_array];

也运行正常。

请记住,不应将C(malloc,calloc,free)的内存管理功能与C ++内存管理(new,delete)混合使用。这肯定会引起问题,因为你可能会在某些时候混淆它们并释放用new分配的内存,或者在malloc等分配的内存上使用delete []。

答案 1 :(得分:0)

由于没有换行符,因此未输出hello文本。这就是为什么还有其他关于缓冲区和刷新的注释。 如果在printf("hello")之后放置一个exit()语句,它可能不会显示段错误。

您最好确定实际的段错误是在调试器中单步执行。