如果标题不清楚,我有这个例子:
int *a = new int[5];
int*b = a;
delete[] a;
a = NULL;
现在a
为NULL,但b
不是。如果我访问b
,它将返回错误的值并可能导致程序崩溃。
如何防止这种情况?
答案 0 :(得分:4)
现在a为NULL
不完全是。 a
指向某些"无效" (delete
- d)记忆。如果您希望它为NULL
,请手动取消。
delete a;
必须是
delete[] a;
如何防止这种情况发生?
没办法,如果你真的需要使用(原始)指针 - 请注意a
的生命周期。它与引用相似 - 你也应该小心。
为避免类似情况,智能指针很有用。或者只使用堆栈变量(当然适用)。