代码如下:

#include <stdio.h>
#include <stdlib.h>

#define SAFE_FREE(ptr) do { free(ptr); ptr = NULL; } while(0)
#define SAFE_DEL(ptr) do { delete ptr; ptr = NULL; } while(0)
#define SAFE_DELARR(ptr) do { delete [] ptr; ptr = NULL; } while(0) 

int main(int argc, char **argv) 
{ 
  char* p = new char[100]; 
  SAFE_DELARR(p); 
  //system("pause"); 
  return 0;
}

实现安全释放指针的机制正是上面的三个宏,其本质就是在释放了指针后,一定要及时地把指针置为NULL。宏体用 do { ... } while(0) 包裹,避免在 if/else 语句中使用时出现编译错误。

注意:上面的代码包括了delete, delete[], 因此是段 C++代码。C的话只要第一个宏即可。