野指针处理的三个要点:
- 定义指针时,把指针变量赋值为NULL
- 释放内存时,先判断指针变量是否为NULL
- 释放完毕后,把指针变量重新赋值为NULL
#include <stdio.h>
#include <stdlib.h>
void free_mem(char *p)
{
if (p != NULL){
free(p);
p = NULL; // 这里的p只是形参,把NULL赋给形参并不影响实参
// 所以当函数执行完后,实参pa的值并不为NULL
}
}
int main(void)
{
char *pa = NULL;
pa = (char *)malloc(100);
free_mem(pa);
return 0;
}
如果最后在main函数里面调用两次free_mem,程序就会报错,因为此时pa不为NULL,执行free(pa)会释放掉一块已经释放了的内存