c语言 如何防止野指针,C语言如何防止野指针

一、野指针

首先,我们先介绍下什么是野指针吧,野指针指指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为 NULL 避免,

{

int *p; //野指针1

...

}

2.指针释放之后未置空

有时指针在free或delect后未赋值 NULL,便会使人以为是合法的。别看free和delete的名字(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。此时指针指向的就是“垃圾”内存。释放后的指针应立即将指针置为NULL,防止产生“野指针”。

main()

{

char *p = new char[10];

delete [] p; //野指针2

if (p !=null) //此处指针p指向任意内存

{

...

}

}

3.指针操作超过变量的作用域

不要返回指向栈内存的指针或引用,因为栈内存在函数结束时会被释放。

示例如下:

int * fun()

{

int a = 5;

int * pa = &a;

return pa;

}

void main()

{

int *p = fun(); //野指针3

printf("%d",*p); //此时*p的值不确定,因为她指向任意值

}

三、避免野指针的方法

1.指针变量一定要初始化为NULL,因为任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的。

2.当指针p指向的内存空间释放时,没有设置指针p的值为NULL。delete和free只是把内存空间释放了,但是并没有将指针p的值赋为NULL,所以当delete或free完后把指针设为NULL。

3.不要返回已经消亡的指针。

总结:我们只能通过养成以上习惯来避免野指针的出现,不然程序出现的bug极难发现和调试出来。

你可能感兴趣的:(c语言,如何防止野指针)