【发布时间】:2020-11-28 06:34:40
【问题描述】:
我正在学习数据结构并遇到了动态数组。现在它们应该可以通过创建一个新循环并将其粘贴到新数组中来调整大小。但是当我取的值超过定义的大小时,它不应该抛出错误吗?
代码如下:
int main() {
int *arr= new int[3];
for (int i = 0; i < 6; i++)
cin >> arr[i];
for (int i = 0; i < 10; i++)
cout << arr[i] <<" ";
return 0;
}
数组的大小是 3。我取了 6 个元素并显示了 10 个。我很困惑这是怎么发生的。
请帮助我理解。
【问题讨论】:
-
数组不可调整大小。
std::vector是。' -
C++ 中没有任何工具可以阻止您越过数组的末尾。这称为未定义行为,任何事情都可能发生。
-
代码不能“正常工作”。你超出了缓冲区。
-
首先,动态数组是不可调整大小的。您只能创建一个新数组并复制现有元素。其次,C++ 不是一种“友好”的语言,它检查所有可能的错误并在你搞砸时给你很好的错误消息。仅仅因为它没有崩溃并不意味着它“有效”。没有人说错误的代码必须“抛出错误”,未定义的行为意味着任何行为都是可能的。
-
例如,如果你的数组在栈上,你可以覆盖栈上的其他东西,比如函数调用的返回地址。