学习笔记
《深入理解C指针》
http://www.ituring.com.cn/book/1147
第3章 指针与函数
源码解析
saferFree
void saferFree(void **pp) {
if (pp != NULL && *pp != NULL) {
free(*pp);
*pp = NULL;
}
}
SafeFree(void ** pp)
-
void
类型表示任何类型,配合指针的指针,做到允许修改传入的指针(指针的值) - 先是调用内置的free函数,
free(*pp)
使用 safeFree 宏
#define safeFree(p) saferFree((void**)&(p))
#include <stdio.h>
#include <stdlib.h>
#define safeFree(p) saferFree((void**)&(p))
void saferFree(void** pp) {
if (pp != NULL && *pp != NULL) {
free(*pp);
*pp = NULL;
}
}
int main() {
int* pi;
pi = (int*)malloc(sizeof(int));
*pi = 5;
printf("Before: %p\n", pi);
safeFree(pi);
printf("After: %p\n", pi);
safeFree(pi);
return (EXIT_SUCCESS);
}
参考资料
- 如何在函数中传入 指针的指针?
https://www.jianshu.com/p/82ed853f6bfa
网友评论