如果标题不清楚,我有这个例子:
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/