野指针

野指针形成原因:

1:未初始化

  我们知道一个指针变量在创建的时候并不是NULL,它的缺省值是随机的,也就是说它可以乱指一通,所以在创建指针时应该初始化,要么将其设置为NULL,要么将其指向一块合法的内存

2:指针释放后未置空

  指针指向的对象主动释放(free,delete)后未及时置空,指针释放只是释放该段内存,指针本身并没有释放,此时指针指向的内存就是垃圾内存,所以释放后应该马上将指针置空

3:作用域后使用指针

  不要返回栈内的指针或者引用,栈内存在离开函数或者作用域的时候会被释放。例子如下:

int main()
{
	int *p=NULL;
	{
		int tem=10;
		p=&tem;
		cout<<"address of p:"<<p<<endl;
		cout<<"p="<<*p<<endl;
	}/**/
	int b=100;
	cout<<"address of b:"<<&b<<endl;
	cout<<"address of p:"<<p<<endl;
	cout<<"p="<<*p<<endl;
	return 0;
}

结果如下:

address of p:0x7ffffd37846c
p=10
address of b:0x7ffffd37846c
address of p:0x7ffffd37846c
p=100

分析:p在作用域内指向的是tem(值10),但是tem在离开作用域后释放了,此时p变为野指针。之后b的栈内存地址就是原来tem被释放的地址,所以p指向的内存值变为100。


你可能感兴趣的:(野指针)