为什么我不能删除以下指针?

Ami*_*mar -4 c++

int main()
{
    int x = 3;
    int* y = new int(4);
    y = &x;
    cout << y;
    delete y;
}
Run Code Online (Sandbox Code Playgroud)

它显示以下错误:

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

0x7ffde8e1c0364已中止

eer*_*ika 9

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

y = &x;
Run Code Online (Sandbox Code Playgroud)

仅返回的地址new可以删除。如果的操作数delete具有其他值(如示例中的自动对象的地址),则程序的行为将不确定。

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


Dou*_*son 6

delete销毁先前由分配new但未x由分配的对象new。您的代码与:

int x=3;
delete &x;
Run Code Online (Sandbox Code Playgroud)

也可以看看: