【问题标题】:C++ if use a block of memory not requested by new?what will happen?C ++如果使用新的未请求的内存块?会发生什么?
【发布时间】: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


【解决方案1】:

对吗?

这不是一个正确的程序。

会发生什么?

任何东西,或一切,或什么都没有。程序的行为未定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    相关资源
    最近更新 更多