为什么我的动态数组工作没有被调整大小?



我正在为我的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++不对数组执行边界检查。因此,当您读取或写入超出数组的边界时,您将触发未定义行为。

对于未定义的行为,您的程序可能会崩溃,它可能会输出奇怪的结果,或者它可能(就像您的情况一样)看起来正常工作。

可以崩溃并不意味着一定会

相关内容

  • 没有找到相关文章

最新更新