【发布时间】:2022-01-13 01:37:59
【问题描述】:
如果我通过operator new申请了一块内存,但是移动了指针并使用了那块内存,正确吗?会发生什么?
这样的代码:
int *p = new int(1);
p[1] = 2;
p[2] = 3;
p[3] = 4;
【问题讨论】:
-
未定义的行为。在最坏的情况下,程序看起来运行良好,让您错误地认为您的代码是正确的。
-
它会回来困扰你,可能是在最糟糕的时候。代码似乎可以完美运行,直到您需要对其进行演示、上交作业或将其投入生产。 :)
-
这是最少的问题,但值得一提的是,
new int(1);在堆上分配了一个int,并将1的值分配给该int,而new int[1];(注意方括号) 分配一个长度为 1 的整数数组。我怀疑你打算做后者,而不是前者。
标签: c++ pointers memory new-operator