首页 > 解决方案 > 为什么我不能删除下面的指针?

问题描述

int main()
{
    int x = 3;
    int* y = new int(4);
    y = &x;
    cout << y;
    delete y;
}

它显示以下错误:

'./a.out' 中的错误:free():无效指针:0x00007ffde8e1c0364

0x7ffde8e1c0364 中止

标签: c++

解决方案


y无法删除,因为它指向行后自动存储的对象

y = &x;

new只能删除返回的地址。如果 的操作数delete具有其他值(例如自动对象的地址,如示例中所示),则程序的行为将是未定义的。

引用的赋值会覆盖之前的值,这是动态分配地址的唯一副本。这种地址丢失称为“内存泄漏”,因为无法再释放动态分配。


推荐阅读