您现在的位置是:首页 >

c语言函数封装 封装free函数遇到的问题

火烧 2021-12-29 12:36:03 1054
封装free函数遇到的问题   做单片机项目的时候 有一个需求要把C库的free函数封装一下 形如MMFree这样的名字 这样就可以在里面添加调试信息以便输出 可是 唉 我想简单了 我这样设计的   

封装free函数遇到的问题  

  做单片机项目的时候 有一个需求要把C库的free函数封装一下 形如MMFree这样的名字 这样就可以在里面添加调试信息以便输出 可是 唉 我想简单了 我这样设计的

  [cpp]

  void MXFreeP(void* p)

  {

  free(p)

  p = NULL;

  }

  int main(int argc char** argv)

  {

  char* p = NULL;

  p = (char*)malloc( )

  if(NULL != p)

  {

  *p = x ;

  }

  MXFreeP(p)

  if(NULL == p)

  {

  printf( p == NULLn )

  }

  else

  {

  printf( p != NULLn ) //运行后 输出这个

  }

  system( pause )

  return ;

  }

  结果 系统崩溃了 回来之后我在PC上照这样写了一下 虽然程序没有崩溃 不过指针指向的内容没有被释放 我想起了以前遇到的指针作为函数参数的问题 明白了 得传二维指针啊

  修改后

  [cpp]

  void MXFreePP(void** p)

  {

  free(*p)

  *p = NULL;

  }

  int main(int argc char** argv)

  {

  char* p = NULL;

  p = (char*)malloc( )

  if(NULL != p)

  {

  *p = x ;

  }

  MXFreePP((void**)&p)

  if(NULL == p)

  {

  printf( p == NULLn ) //运行后输出这个

  }

  else

  {

  printf( p != NULLn )

c语言函数封装 封装free函数遇到的问题

  }

  system( pause )

  return ;

  }

  终于得到期望的结果了 不过要使用这个函数的话 还必须得到指针的二维指针 麻烦啊 如果在函数内部取的话 又因为是值拷贝 取得的二维指针不是原来的二维指针 我想了很久 还是用宏吧

  [cpp]

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

  printf( I have been freed n )

lishixinzhi/Article/program/Java/hx/201311/25832  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码