如果標題是不明確的,我有這樣的例子:如何在訪問已刪除的內存塊時避免錯誤?
int *a = new int[5];
int*b = a;
delete[] a;
a = NULL;
現在a
爲NULL,但b
不是。如果我訪問b
,它將返回錯誤的值並可能導致程序崩潰。
如何預防?
如果標題是不明確的,我有這樣的例子:如何在訪問已刪除的內存塊時避免錯誤?
int *a = new int[5];
int*b = a;
delete[] a;
a = NULL;
現在a
爲NULL,但b
不是。如果我訪問b
,它將返回錯誤的值並可能導致程序崩潰。
如何預防?
現在是空
不完全是。 a
指向一些「無效」(delete
-d)內存。如果您希望它是NULL
,請手動取消它。
delete a;
必須
delete[] a;
如何防止這種情況發生?
沒辦法,如果你真的需要使用(原始)指針 - 只要小心使用a
的生命週期。它與參考文獻相似 - 你也應該小心。
爲了避免類似的情況,智能指針很有用。或者只是使用堆棧變量(當然,如果適用的話)。
好吧,你能提供一種解決方法嗎?就像我們試圖創建一個池來容納所有的對象,而不是使用'delete',但這是行不通的。 ! – Tiana987642
@ Tiana987642你不能只留下懸掛指針嗎?這是非常具體的事情。 –
@ Tiana987642 - 「所謂的解決方法」是使用引用計數指針,它是智能(共享)指針或其他類型的智能指針,根據需要而定 –
這必須是'delete [] a'。 –
謝謝,你是對的! – Tiana987642
兩種解決方案:不要使用指針(這是我推薦的,C++已經大大降低了對指針的需求),或者使用[smart](http://en.cppreference.com/w/cpp/memory/shared_ptr) [指針](http://en.cppreference.com/w/cpp/memory/unique_ptr)。 –