点击上方蓝字关注我,了解更多咨询
1、指针变量未初始化,任何指针变量刚被创建时不会自动成为 NULL 指针,它的缺省值是随机的。
所以,指针变量在创建的同时应当被初始化,要么将指针设置为 NULL ,要么让它指向合法的内存。
#include <stdio.h>
void Swap(int *p1,int *p2)
{int *tmp;*tmp=*p1;*p1=*p2;*p2=*tmp;//*p1指向了无效地址,程序会给出警告,使用了未初始化的局部变量tmp,*tmp的值无法被访问,因为tmp未初始化,它的地址是个随机值(0xcccccccc)
}
如果没有初始化,编译器会报错‘point’ may be uninitializedin the function。
2、指针释放后之后未置空。
指针在 free 或 delete 后未赋值 NULL ,它们只是把指针所指的内存给释放掉,但并没有处理指针本身。此时指针指向不可知的(随机的、不正确的、没有明确限制的)。
释放后的指针应立即将指针置为NULL,防止产生野指针。
int main()
{char *p;p=(char*)malloc(10);printf("%s\n",p);if(p!=NULL){free(p);}
free(p);//再次释放p时,因为前面已经被释放了一次,再次释放会报错
return 0;
}
END
*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
戳“阅读原文”我们一起进步