熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

封裝free函數遇到的問題

2022-06-13   來源: Java核心技術 

  做單片機項目的時候有一個需求要把C庫的free函數封裝一下形如MMFree這樣的名字這樣就可以在裡面添加調試信息以便輸出可是我想簡單了我這樣設計的

  [cpp]

  void MXFreeP(void* p)

  {

  free(p)

  p = NULL;

  }

  int main(int argcchar** argv)

  {

  char* p = NULL;

  p = (char*)malloc(

  if(NULL != p)

  {

  *p = x;

  }

  MXFreeP(p)

  if(NULL == p)

  {

  printf(p == NULL\n

  }

  else

  {

  printf(p != NULL\n //運行後輸出這個

  }

  system(pause

  return ;

  }

  結果系統崩潰了回來之後我在PC上照這樣寫了一下雖然程序沒有崩潰不過指針指向的內容沒有被釋放我想起了以前遇到的指針作為函數參數的問題明白了得傳二維指針啊

  修改後

  [cpp]

  void MXFreePP(void** p)

  {

  free(*p)

  *p = NULL;

  }

  int main(int argcchar** argv)

  {

  char* p = NULL;

  p = (char*)malloc(

  if(NULL != p)

  {

  *p = x;

  }

  MXFreePP((void**)&p)

  if(NULL == p)

  {

  printf(p == NULL\n //運行後輸出這個

  }

  else

  {

  printf(p != NULL\n

  }

  system(pause

  return ;

  }

  終於得到期望的結果了不過要使用這個函數的話還必須得到指針的二維指針麻煩啊如果在函數內部取的話又因為是值拷貝取得的二維指針不是原來的二維指針我想了很久還是用宏吧

  [cpp]

  #define  MXFreePP(p) free((void*(p))) ; \

  printf(I have been freed\n

  C語言的指針果然深奧我還要繼續研究


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25832.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.