C++:删除由new创建的指针时的内存问题

我对以下代码有点困惑

int main()
{
    int* a = new int{12};
    int* b = new int;

    b = a;
    delete a;

    delete b;

    return 0;
}

该代码返回一个错误

a.out(27538,0x10ade7e00) malloc: *** error for object 0x7f8c18504160: pointer being freed was not allocated
a.out(27538,0x10ade7e00) malloc: *** set a breakpoint in malloc_error_break to debug
zsh: abort      ./a.out

我的问题是,当我删除 a 时,它会自动删除 b 吗?这里的机制是什么,我有点迷路了。

回答

b = a;    // here the int that b pointed at "leaks" (you have no way of deleting it)

delete a; // here "a" is deleted first

delete b; // here "a" is deleted a second time (undefined behavior)

当您分配ato的值时bb先前包含的值(地址,如果您愿意)将被遗忘。双方ab再分在同一个对象。然后,您失去deleteb指向原始对象的所有可能性。当你然后delete b你实际上尝试删除a第二次。


以上是C++:删除由new创建的指针时的内存问题的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>