为啥我的动态数组可以在不调整大小的情况下工作? [复制]

Posted

技术标签:

【中文标题】为啥我的动态数组可以在不调整大小的情况下工作? [复制]【英文标题】:Why does my dynamic array work without being resized? [duplicate]为什么我的动态数组可以在不调整大小的情况下工作? [复制] 【发布时间】:2021-12-13 03:03:01 【问题描述】:

我正在为我的 c++ 课程研究动态数组,但我对动态数组的行为感到困惑。例如,如果我运行这段代码:

int* myDynamicArr = new int[3];

for (int i = 0; i < 10; i++)

    myDynamicArr[i] = i + 1;
    cout << myDynamicArr[i] << endl;

我希望它不起作用,因为我只将它声明为大小 3。但是当我运行它时,它会打印出 0-9。如果我这样做也是一样:

char* myCharArr = new char[2];
strcpy(myCharArr, "ThisIsALongString");
cout << myCharArr;

即使看起来应该失败,它也会打印完整的字符串。谁能解释我在这里做错了什么?谢谢!

【问题讨论】:

欢迎来到“未定义行为”的世界Undefined, unspecified and implementation-defined behavior 【参考方案1】:

C++ 不对数组执行边界检查。因此,当您读取或写入超出数组边界时,您会触发 undefined behavior。

由于未定义的行为,您的程序可能会崩溃,它可能会输出奇怪的结果,或者它可能(如您的情况)似乎正常工作。

仅仅因为它可能崩溃并不意味着它

【讨论】:

以上是关于为啥我的动态数组可以在不调整大小的情况下工作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何调整动态分配的多态对象数组的大小?

函数在不删除动态数组的情况下工作。程序有效且没有错误

调整动态字符串数组的大小[关闭]

在不自动调整大小的情况下确定 UIView 容器大小

在不停止 stackView 自动调整大小的情况下对齐图像视图

如何在不调整大小的情况下旋转 UITextView?