如何避免访问已删除的内存块时出错

How to avoid error when access to the deleted memory block?

本文关键字:内存 出错 删除 何避免 访问      更新时间:2023-10-16

如果标题不清楚,我有这个例子:

    int *a = new int[5];
    int*b = a;
    delete[] a;
    a = NULL;

现在a是NULL而b不是。如果我访问b,它将返回错误的值,并可能使程序崩溃。

如何预防?

现在是NULL

不完全是。a指向一些"无效"(delete -d)内存。如果您希望它为NULL,请手动取消它。


delete a;
必须

delete[] a;

如何防止这种情况发生?

不可能,如果你真的需要使用(原始)指针——只要小心a的生命周期。这与引用相似——你也应该小心。

为了避免类似的情况,智能指针非常有用。或者直接使用堆栈变量(当然,在适用的情况下)。