野指针

作者: 踩在浪花上00 | 来源:发表于2016-12-06 16:46 被阅读0次

野指针指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为NULL避免,而只能通过养成良好的编程习惯来尽力减少。对野指针进行操作很容易造成程序错误。

野指针主要是因为这些疏忽而出现的:

指针变量未初始化

任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。

指针释放后之后未置空

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

指针操作超越变量作用域

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

classA {

public:

voidFunc(void){ cout << “Func ofclassA” << endl; }

};

classB {

public:

A *p;

voidTest(void) {

A a;

p = &a;// 注意 a 的生命期 ,只在这个函数Test中,而不是整个class B

}

voidTest1() {

p->Func();// p 是“野指针”

}

};

函数 Test1 在执行语句 p->Func()时,p 的值还是 a 的地址,对象 a 的内容已经被清除,所以 p 就成了“野指针” 。

相关文章

  • 什么是野指针?什么是僵尸对象?

    野指针与僵尸对象 1. 野指针 1>C语言中的野指针:一个指针变量指向一块随机的空间,这个指针就是野指针当我们声明...

  • 空指针和野指针

    1、什么是空指针,什么是野指针 2、野指针的危害

  • iOS监控-野指针定位

    iOS监控-野指针定位 iOS监控-野指针定位

  • 野指针空指针万能指针

    野指针空指针万能指针

  • 野指针危害真的很大吗?

    想要知道野指针危害到底有多大,首先需要知道野指针是怎么形成的,以及形成野指针会带来什么本质上的缺点。 当然,野指针...

  • iOS-空指针,野指针,僵尸对象

    浅谈一下空指针,野指针,僵尸对象。 空指针:没有存储任何内存地址的指针,空指针的值是0; 野指针:指针指向的对象已...

  • 野指针

    概念:野指针指指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为NU...

  • 野指针

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

  • 野指针

    野指针是让人非常淡疼的一件事,遇到这种问题,人品好的时候程序正常运行,人品差的时候隔三差五的Crash,还不好找,...

  • 野指针

    指针是个很强大的工具,可是正因为它太强大,所以要操作它不是件易事。操作不当造成的野指针,甚至会引起系统死机等比较严...

网友评论

      本文标题:野指针

      本文链接:https://www.haomeiwen.com/subject/ubyrmttx.html