我有点卡住了。看来,仅仅声明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机器。谢谢你的帮助。
答案 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()语句,它可能不会显示段错误。
您最好确定实际的段错误是在调试器中单步执行。