*** glibc detected *** free(): invalid pointer: *** glibc detected *** malloc(): memory corruption:

* glibc detected * free(): invalid pointer:
* glibc detected * malloc(): memory corruption:
* glibc detected double free or corruption (out): 0x00000000005c18a0 **
* glibc detected corrupted double-linked list: 0x00000000005ab150 **

你是否遇到過這樣的情況,太沮喪了,程序總是無端coredump,gdb到core文件裏面也看不出個所以然來,這對於一個大型的商業系統來說太令人恐怖了,事故隨時可能發生。

遇到棘手的問題,慌張是沒用的,解決不了任何問題。先坐下來,喝杯茶,舒緩一下神經。

內存問題始終是c++程序員需要去面對的問題,這也是c++語言的門檻較高的原因之一。通常我們會犯的內存問題大概有以下幾種:

1.內存重複釋放,出現double free時,通常是由於這種情況所致。
2.內存泄露,分配的內存忘了釋放。
3.內存越界使用,使用了不該使用的內存。
4.使用了無效指針。
5.空指針,對一個空指針進行操作。

對於第一種和第二種,第五種情況,就不用多說,會產生什麼後果大家應該都很清楚。

第四種情況,通常是指操作已釋放的對象,如:
1.已釋放對象,卻再次操作該指針所指對象。
2.多線程中某一動態分配的對象同時被兩個線程使用,一個線程釋放了該對象,而另一線程繼續對該對象進行操作。

我們重點探討第三種情況,相對於另幾種情況,這可以稱得上是疑難雜症了(第四種情況也可以理解成內存越界使用)。

內存越界使用,這樣的錯誤引起的問題存在極大的不確定性,有時大,有時小,有時可能不會對程序的運行產生影響,正是這種不易重現的錯誤,纔是最致命的,一旦出錯破壞性極大。

什麼原因會造成內存越界使用呢?有以下幾種情況,可供參考:
例1:
char buf[32] = {0};
for(int i=0; i

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章