1

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

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

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

如何防止这种情况?

4

1 回答 1

4

现在 a 为 NULL

不完全是。a指向一些“无效”(delete-d)内存。如果你想要它NULL,手动取消它。


delete a;

一定是

delete[] a;

如何防止这种情况发生?

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

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

于 2014-03-25T14:34:15.113 回答