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

时间:2014-03-25 14:29:55

标签: c++ pointers delete-operator dangling-pointer

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

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

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

如何防止这种情况?

1 个答案:

答案 0 :(得分:4)

  

现在a为NULL

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


delete a;

必须是

delete[] a;

  

如何防止这种情况发生?

没办法,如果你真的需要使用(原始)指针 - 请注意a的生命周期。它与引用相似 - 你也应该小心。

为避免类似情况,智能指针很有用。或者只使用堆栈变量(当然适用)。