c++ - 在 C++ 中为数组分配特定数量的内存的目的是什么?

标签 c++ arrays pointers

我是一名学生,本学期正在学习 C++ 数据结构类(class),我遇到了一些我今晚不太理解的东西。假设我要在堆上创建一个指向数组的指针:

int* arrayPtr = new int [4];

我可以使用指针语法访问这个数组

int value = *(arrayPtr + index);

但是如果我在为数组分配的空间结束后立即向内存位置添加另一个值,我将能够访问它

*(arrayPtr + 4) = 0;
int nextPos = *(arrayPtr + 4);
//the value of nextPos will be 0, or whatever value I previously filled that space with

*(arrayPtr + 4) 在内存中的位置超过了为数组分配的空间的末尾。但据我了解,以上仍然不会造成任何问题。因此,除了它是 C++ 的要求之外,为什么还要在声明数组时为它们指定特定大小?

最佳答案

当您越过已分配内存的末尾时,您实际上是在访问其他某个对象的内存(或现在可用的内存,但稍后可能会更改)。因此,它给您带来麻烦。尤其是当您尝试向其中写入内容时。

关于c++ - 在 C++ 中为数组分配特定数量的内存的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32879198/

相关文章:

c - 理解 C 中的 NULL 指针

c++ - 为多边形轮廓绘制圆的最有效方法

javascript - 使用 php、ajax 和 javascript 循环仅执行最后一个数组元素

c - 将 64 个 bool 数组打包/解包到一个 uint64 中

php - array_combine 在 foreach 循环中组合数组值

c - KD 树 - 理解指针的困难

c - 在指向 char 的指针数组中输入单词时出错

c++ - move unique_ptr<T> 的 vector

C#:Marshall 结构数组,其字符串从 Unity 中的 C++/ObjectiveC 到 C#

c++ - 将内存文件添加到 clang CompilerInstance