在一個半大型的專案中(大約5000多行代碼)......
我有一個將指標作為其欄位之一的類。這個指標被宣告了,但沒有被初始化:
我有一個類,它的一個欄位是指標。
蘋果 *apple。
在類的建構式中,如果指標是NULL,我就初始化了它:
if (apple == NULL) {
apple = new Apple();
在專案的代碼中,我進一步做了:
apple->color = "red"/span>;
這個程式運行了幾個月,直到今天它給了我一個EXC_BAD_ACCESS錯誤,因為apple指標沒有明確地初始化為NULL,而是以一些垃圾值開始 - 所以NULL檢查失敗,并且取消參考它給出了EXC_BAD_ACCESS。
所以我的問題是--這個程式是如何在月日正常作業的?指標之前被設定為NULL完全是靠運氣嗎?
注:我沒有對這里的代碼進行修改,只是在專案的其他地方做了一些沒有觸及這個問題/看起來無關緊要的修改。
uj5u.com熱心網友回復:
在建構式中,你不需要檢查變數的 "先前 "狀態,只需無條件地將其設定為你需要的狀態。
你確定你想要一個指向Apple的指標,而不是那個物件本身?如果你在你的類中有
蘋果apple;
它將被默認為是為你構建的,你將不需要明確地洗掉它(你可能會忘記,泄露記憶體)。
uj5u.com熱心網友回復:
這很難決定性地告訴你,但可能是的,這個程式的作業完全是靠運氣。
如果你沒有明確地初始化一個指標,你就不能對它進行任何假設,TBH,程式開始崩潰并不奇怪,但它一直作業到現在。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/315474.html
標籤:
下一篇:結構內的結構:指向或不指向?
