C/C++ 基礎-free 和 delete 釋放記憶體

來源:互聯網
上載者:User

free 和 delete 把指標怎麼啦?

  別看 free 和 delete 的名字惡狠狠的(尤其是 delete),它們只是把指標所指的記憶體給
釋放掉,但並沒有把指標本身幹掉。

  用調試器跟蹤樣本 7-5,發現指標 p 被 free 以後其地址仍然不變(非 NULL),只是
該地址對應的記憶體是垃圾,p 成了“野指標”  。如果此時不把 p 設定為 NULL,會讓人誤
以為 p 是個合法的指標。

  如果程式比較長,我們有時記不住 p 所指的記憶體是否已經被釋放,在繼續使用 p 之
前,通常會用語句 if (p != NULL)進行防錯處理。很遺憾,此時 if 語句起不到防錯作用,
因為即便 p 不是 NULL 指標,它也不指向合法的記憶體塊。

   char *p = (char *) malloc(100);
   strcpy(p, “hello”);
                   // p 所指的記憶體被釋放,但是 p 所指的地址仍然不變
   free(p);
   ...
   if(p != NULL)   // 沒有起到防錯作用
   {
      strcpy(p, “world”); // 出錯
    }
                             樣本 7-5 p 成為野指標



更多閱讀可見:http://book.51cto.com/art/200811/96142.htm

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.