【发布时间】:2015-04-27 20:59:52
【问题描述】:
我有以下动态分配的数组
int capacity = 0;
int *myarr = new int [capacity];
如果我这样做会发生什么:
for (int i = 0; i < 5; ++i)
myarr[++capacity] = 1;
如果for 循环的执行次数超过 5 次,这会导致错误吗?它适用于小数字,但我想知道这是否可能是一种错误的方法。
【问题讨论】:
-
欢迎来到未定义行为的土地
-
这无论如何都会导致错误。您已经创建了一个大小为 0 的数组,您放入数组中的任何内容实际上都放在了数组之后。
-
“它工作得很好” - 不,它没有,它只是看起来那样。
-
对于所有可能的情况,这绝对是错误的方法。
-
您看到错误的事实意味着您犯了错误。您没有看到错误的事实并不意味着您没有犯错误。您正在调用未定义的行为并且您知道它(您正在写入未分配的内存区域):目的是什么?
标签: c++ memory dynamic allocation