这是我正在使用的代码片段:
int *a;
int p = 10;
*(a+0) = 10;
*(a+1) = 11;
printf("%d\n", a[0]);
printf("%d\n", a[1]);
现在,我希望它能打印出来
10
11
但是,会出现一个窗口,提示 program.exe 已停止工作。
如果我注释掉第二行代码 int p = 10;
然后再次调整代码,它就可以工作了。
为什么会这样? (我想做的是创建一个动态大小的数组。)
最佳答案
可能至少有 50 个重复项,但找到它们可能并非易事。
无论如何,您正在定义一个指针,但没有内存让它指向。您正在写入指针在启动时恰好包含的任何随机地址,从而产生未定义的行为。
此外,您的代码无法编译,因为 int *a, int p = 10;
在语法上不正确——逗号需要变成分号(或者您可以去掉第二个 int
,但我真的不推荐这样做)。
在 C 中,您可能希望使用数组而不是指针,除非您需要动态分配空间(哎呀,重读,您显然确实想要 - 所以您需要使用 malloc
分配空间,如 a = malloc(2);
——但你也想在使用前检查返回值——至少在理论上,malloc
可以返回空指针)。在 C++ 中,您可能希望使用 std::vector
而不是数组或指针(它将为您管理动态分配)。
关于c++ - C中的动态大小数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10983201/