關於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...