c++ - C中的动态大小数组

标签 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]);

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

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/

相关文章:

c - 我的平方根代码有什么问题?

c - 为堆栈上的变量声明指针有什么意义吗?

java - Java 中的 == 和 .equals 有什么区别?

c - 修改动态分配的 char* 二维数组的函数

c++ - 在特定对象上调用的成员函数上设置断点

c++ - 如何判断未知类型数组的索引是否为空?

c - 如何使用lapack库解决c中矩阵乘法的链接器错误?

javascript - 这些数组之间的差异以及如何比较它们?

c++ - glTranslatef 拉伸(stretch)我的球体,如何在不拉伸(stretch)球体的情况下平移球体?

c++ - char var[] 和 char var[][] 之间的区别