2011年8月7日 星期日

malloc 常識

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

 

沒有留言:

張貼留言