關於delete的時候core dump的除錯經歷

2021-06-16 20:32:23 字數 710 閱讀 3810

關於delete p;的時候core dump的情況

core dump裡面的資訊是:free(): invalid next size (fast)

invalid next size (fast)

除錯了一晚上,百思不得其解,也懷疑過os或者讓多執行緒的問題,谷歌也沒有頭緒。

最後發現是陣列越界,吐得一口好血。

故事是這樣的:

簡化後的**如下:

size_t a = 4

char * p =  new char[a];

size_t b = function("abcb",4,p);//只是舉例

...coutdelete p;//core dump

會發現a,b值是一樣的。

這樣看來的話也沒有越界。

因為function以前一直使用的是乙個編碼轉換的函式,返回值b代表轉換後的編碼字串長度。

最後發現,在function裡面對於p指標,操作的大小其實比返回值+1。

因為最後有乙個

*p = '\0';來作為字串終止符的的。

在此為了說明問題將**簡化了,看上去很簡單,但是在實際除錯的時候**比較複雜,很讓人絕望的感覺。

原因在於遇到coredump心態上畏懼,一直懷疑不會是什麼os啊之類的問題吧,一直覺得自己寫的**這麼清晰明了怎麼可能有bug,但是其實**有時候都是腦子混亂的時候寫的,留下的坑還是很需要仔細review的。

關於delete 和delete的區別

自己也有和lz同樣的疑惑,於c 屆還是小白一枚啊。問題 看高質量c 程式設計的時候有個地方沒看懂,就是在string的析構函式中釋放m data時用delete m data,但後面跟著有個注釋 由於m data 是內部資料型別,也可以寫成 delete m data delete m data不是...

關於delete和delete 的區別

在c 動態記憶體分配中我們常用到new和delete兩種操作,new用來申請記憶體,delete用來釋放記憶體。那麼問題來了,我們應該用delete來釋放記憶體還是用delete來釋放記憶體呢?為了得到答案我做了一下實驗。注 一下實驗在使用delete和delete得到的結果是一樣的,不重複po圖 ...

關於delete 和 delete 二

3.下面我們來看看上面提到的4位元組是幹什麼用的。int main 執行結果 adress after malloc 0x804a008 size 104 a a adress after new 0x804a00c number of a at 0x804a008 100 size of a at...