【问题标题】:How is the memory allocated to a variable if another (same data-type) variable is freed just before it? [duplicate]如果另一个(相同数据类型)变量在它之前被释放,内存是如何分配给一个变量的? [复制]
【发布时间】:2020-03-19 09:24:45
【问题描述】:

我在网上看到了悬空指针主题下的这段c++代码,并尝试执行它。 这可能看起来不愉快,但这里......

int *x, *y, *z;
x = new int;
*x = 3;
y = x;
delete x;
x = NULL;
z = new int;
*z = 5;
*y = 2;

当我打印 *z 时,它总是等于 *y 的值(在最后一行代码中指定),在这种情况下为 2 但如果我专门在倒数第二行本身做了 *z = 5

【问题讨论】:

  • 可能是因为y 恰好指向同一个内存位置。但是,这是 UB,因此不能保证 y 指向与 z 相同的内存位置。

标签: c++ pointers memory-management stack dangling-pointer


【解决方案1】:

具有未定义行为,everything is possible

在您的情况下,y 指向的对象被销毁(它是一个悬空指针),并且使用*y 取消引用y 是UB(当您尝试分配时更糟那里的东西)。

似乎在delete x 之后,编译器决定在new 调用中将内存块分配给z,这是完全合理的(但不能保证——绝对任何其他空闲内存块也是有效的)。
因为y 恰好指向同一个内存块,看起来你可以使用y 操作z 指针对象,但你不能——你不知道y 真正指向的位置。

【讨论】:

    猜你喜欢
    • 2019-08-16
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 2016-04-18
    • 2018-03-10
    • 1970-01-01
    相关资源
    最近更新 更多