int* p = (int *) malloc (1);
- 代碼也能通過編譯,但事實上只分配了1個字節大小的內存空間,當你往裡頭存入一個整數,就會有3個字節無家可歸,而直接「住進鄰居家」。造成的結果是後面的內存中原有數據內容全部被清空。
- malloc 只管分配記憶體,並不能對所得的記憶體進行初始化,所以得到的一片新記憶體中,其值將是隨機的。
當發生glibc dected : double free or corruption 問題:
- CASE 1:
memory 發生overwrite ,可能是宣告SIZE太小,實際運用時超過該SIZE - CASE2:
對非法的POINTER做free() EX: 先列印出所有會使用到free()的函式: ------------------------執行函式前 buf=0x10023750 tmp=0x10023948 cmd=0xbfe2e49c un_cmd=0x10023d38 ------------------------執行函式後 buf=0x10023750 tmp=0x10023948 cmd=0x10023750 un_cmd=0x10023d38 由此可知,pointer 'cmd'被更改了,所以要做free動作將導致出錯
ref: Here
沒有留言:
張貼留言