- free完不赋空/指针不赋初值,一般不会犯
- 中间值传递
int *p = (int *)malloc(); int *a = p; free(a);a=NULL; p就是野指针
- 函数返回或传递出指向栈空间的指针。函数退出,栈帧销毁,p未赋空。
int * test(int *p) { int a = 0; int *tmp = &a; p = tmp; return tmp; } main() { int *p1=NULL, *p2=NULL; p1 = test(p2); } 函数返回,a被释放,&a不存在,则p1,p2为野指针
- 还有一个随便玩的
int *p = (int *)malloc(); int **p1 = &p; free(p1); p1 = NULL; 此时p的内存空间被释放,p的值是个任意值,堆得空间会得到泄露。如果后续引用p,p就是个野指针
野指针产生情况--随笔
最新推荐文章于 2024-04-22 23:20:04 发布