C中动态大小的数组

Jat*_*tin 0 c c++ arrays pointers

这是我正在使用的代码片段:

int *a;
int  p = 10;

*(a+0) = 10;
*(a+1) = 11;
printf("%d\n", a[0]);
printf("%d\n", a[1]);
Run Code Online (Sandbox Code Playgroud)

现在,我希望它能打印出来

10
11
Run Code Online (Sandbox Code Playgroud)

但是,会出现一个窗口,显示program.exe已停止工作.如果我注释掉第二行代码int p = 10;然后再次调试代码就行了.

为什么会这样?(我想要做的是创建一个动态大小的数组.)

Jer*_*fin 9

可能至少有50个这样的重复,但找​​到它们可能是非平凡的.

总之,你定义一个指针,但没有内存它指向.您正在写入指针在启动时包含的任何随机地址,从而产生未定义的行为.

此外,您的代码将无法编译,因为int *a, int p = 10;在语法上不正确 - 逗号需要成为分号(或者您可以摆脱第二个int,但我不会真的推荐).

在C中,你可能想要使用数组而不是指针,除非你需要动态分配空间(oops,重读,你显然想要 - 所以你需要malloc用来分配空间,比如a = malloc(2);- 但是你还想在使用之前检查返回值 - 至少在理论上,malloc可以返回空指针).在C++中,您可能希望使用std::vector而不是数组或指针(它将为您管理动态分配).