为什么我的动态数组可以在不调整大小的情况下工作?

Why does my dynamic array work without being resized?

我正在为我的 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;

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

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

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

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