正確規避野指標姿勢

2021-07-24 00:02:36 字數 1176 閱讀 1135

新手必看,大神繞道勿噴。謝謝!

break在前幾天寫**時,**在windows上完美執行,但是放到android上執行時發現有記憶體洩漏,導致閃退。這個錯誤源於break寫**時不小心使用了野指標。於是寫下這篇文章加深印象,以防以後再犯。

看下面一段**:

class a 

};void main()

(ps:這sb**是誰寫的!弱智麼?)

呵呵,我寫的。這段**編譯器絕對不會給你報錯,輸出如下:

乙個指標,delete之後不能再使用了,否則會出現很多未知的錯誤。但有的時候我們並不能準確的知道一段記憶體會在什麼時候被delete,也不知道我們什麼時候要使用這段記憶體,這就很尷尬了對不對。

其實不然,只要掌握正確的指標使用姿勢,這都不是難題。為了判斷乙個指標是否能用我們往往這麼寫:if(ptr!=nullptr)。這麼寫是對的,但是只對了一半。因為這裡只做了一半的工作。看下面一段**:

class a 

};void func(a* ptr)

}void main()

輸出如下:

(ps:ptr is null 呢?被你吃了?)抱歉,break並沒有吃它

ptr被delete了之後並不會置空,它還是指向原來那段記憶體,只是給這段記憶體標記為「未被占用」。所以(ptr==nullptr)就是false。

所以正確的姿勢是:delete ptr之後馬上給ptr置空,然後在使用之前對ptr是否為空做判斷。

正確姿勢:

class a 

};void func(a* ptr)

}void main()

對於新手來說,編譯器不報錯,但是執行出錯,這是最尷尬的事情了。野指標的使用就很有可能出現這種情況。掌握上面的指標使用姿勢,媽媽再也不怕我被野指標虐

C 指標型別識別正確姿勢

指標是c和c 中程式設計最複雜也是最有技巧的部分,但對於新手來說,指標無疑是最致命的,讓很多人望而退步。不過很多事情都是從陌生開始,然後漸漸熟悉起來的,就像交朋友一樣,得花點時間去培養感情才行。不過指標這位朋友可比較高冷,只花一點點時間恐怕不夠,得多學多練多接觸,它才會給你展示它熱情的一面。好了,廢...

識別C 指標型別的正確姿勢

昨天在看譚浩強的c 的時候,覺得指標這塊雖然分塊闡述 關於指標定義 指標變數 陣列與指標 字串與指標 函式與指標等有所闡述,但在分類以及如何辨別方面沒有乙個清晰的方法和思路。為了對這一塊內容有更深的理解,整理一下關於指標辨認的方法。一般情況下,指標結合性是從右到左的。從這點來看,我們首先提取出要辨認...

什麼是野指標?野指標的危害?如何避免野指標?

什麼是野指標?野指標是指隨機指向一塊記憶體的指標 野指標的危害?如何避免野指標?我們要在以後養成良好的編碼習慣 1.將沒有指向的指標初始化指向null 指向null的指標不能對他的指向進行修改 2.當想給乙個指標指向的空間賦值時,一定要給這個指標分配空間 malloc 3.當空間分配完後,要檢查這個...