c++ - 如何避免访问被删除的内存块时出错?

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

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

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

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

如何防止这种情况?

最佳答案

now a is NULL

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


delete a;

必须是

delete[] a;

How to prevent this happen?

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

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

关于c++ - 如何避免访问被删除的内存块时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22637595/

相关文章:

c++ - 构造函数的赋值初始化

c++ - 查找指向数组最大值的指针

c++ - delete 使用的已分配内存的计数在内存中的确切位置?

c++ - "delete this"在构造函数中

C++ 输入数据到用户定义类型的 vector ?

c++ - 我们可以在没有 'advance' 函数的情况下增加迭代器多个位置吗?

c++ - 如何在 flex 上识别 token ~?

c++ - 在c函数中传递字符串时发出警告

C++ 查找指针错误

c++ - 删除运算符,它们等同于 C++ 中的析构函数