C++杜绝“野指针”

“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。

“野指针”的成因主要有两种:

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

char *p = NULL;

char *str = (char *) malloc(100);

(2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。参见7.5节。

(3)指针操作超越了变量的作用范围。这种情况让人防不胜防,示例程序如下:

class A

{

public:

void Func(void){ cout << “Func of class A” << endl; }

};

void Test(void)

{

A  *p;

{

A  a;

p = &a; // 注意 a 的生命期

}

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

}

函数Test在执行语句p->Func()时,对象a已经消失,而p是指向a的,所以p就成了“野指针”。但奇怪的是我运行这个程序时居然没有出错,这可能与编译器有关。

C++杜绝“野指针”相关推荐

  1. C++中野指针问题以及如何杜绝野指针

    "野指针"不是NULL指针,是指向"垃圾"内存的指针.人们一般不会错用NULL指针,因为用if语句很容易判断.但是"野指针"是很危险的,if ...

  2. C和C++中的野指针问题

    文章目录 1 C和C++中的野指针问题 1.1 野指针的概念 1.2 野指针的由来 1.3 杜绝野指针的基本原则 2 C和C++中的常见内存错误 2.1 常见内存错误 2.2 内存操作的基本规则 1 ...

  3. C++中的野指针问题

    文章目录 1 C和C++中的野指针问题 1.1 野指针的概念 1.2 野指针的由来 1.3 杜绝野指针的基本原则 2 C和C++中的常见内存错误 2.1 常见内存错误 2.2 内存操作的基本规则 1 ...

  4. 一个双线程下同一时候操作指针变量导致野指针出现的问题总结

    来源:http://blog.csdn.net/lezhiyong 问题: 在某项目的測试过程中,測试在高清压力測试过程中会偶尔出现RSS崩溃现象,崩溃时间不确定,因为在守护进程服务的守护下,RSS崩 ...

  5. 关于memset,malloc以及free后的野指针误区详解

    1.首先来看看memset这个函数 void *memset(void *s, int c, size_t n); memset函数的功能是将一段内存初始化为某个特定的值,并且初始化内存是以内存为单位 ...

  6. 021-C++中野指针

    /*** 1. 未初始化和非法的指针* 例子:* int *a; // 注意: a这里指向哪里?不确定会指向哪里 这里会发生什么* *a = 12;* 运气好的话:定位到一个非法地址,程序会出错,从而 ...

  7. iOS多线程同时操作同一内存造成野指针

    iOS多线程同时操作同一内存造成野指针 iOS多线程同时操作同一内存造成野指针,原因:崩溃线程崩中使用指针的真正创建与销毁地方在另另外一个线程中,崩溃线程只是使用这个指针拷贝. 这两个操作发送在两个线 ...

  8. 【C++】野指针及其危害

    [C++] 野指针及其危害 引言:小白在初期敲代码时最可能碰到的问题之一估计就是野指针了,因为它在写程序的时候一不注意就写出来了,且不容易被发现,调试半天可能也不会出结果.去找大佬一看,其实就是一个很 ...

  9. Go 知识点(19)— Go 语言中的野指针

    野指针是一种指向内存位置是不可知的指针,一般是由于指针变量在声明时没有初始化所导致的.在 Go语言中,布尔类型的零值为 false,数值类型的零值为 0,字符串类型的零值为 "", ...

最新文章

  1. 246.三元图的应用与绘图实战
  2. 8核移动处理器时代来临
  3. 石墨烯新新新应用,MIT大规模生产细胞大小机器人,有感知能存储
  4. Theano3.4-练习之多层感知机
  5. 2013年工作中遇到的20个问题:181-200
  6. python处理3000个excel-Python处理Excel数据的坑,一文让你不用重复犯错
  7. linux环境下获取真实的ip地址
  8. gifcam使用缩小内存_Fedora 上的桌面环境内存占用测试 | Linux 中国
  9. ef mysql modelfirst_MySQL –EF edmx(Model First)– Sql Server table
  10. 《大数据》2015年第2期“研究”——特异群组挖掘:框架与应用
  11. Ubuntu 删除dash 中无效的图标
  12. word横向网格线设置在哪里_word排版技巧:如何防止行距随字号而改变?
  13. 2019.8.1正则二
  14. 桥牌笔记:挤牌的条件之一,调整赢墩到只差一墩
  15. netty实现gmssl_gmssl国密总结
  16. 瑞利衰落信道仿真---Clarke Jakes Zheng模型(含matlab程序)
  17. ShadowGun Deadzone 放出 GM Kit Mod 包
  18. 艾默生黑色无线电池701PBKKF
  19. Flutter Connection to **** was not upgraded to websocket
  20. Django框架学习记录(3)

热门文章

  1. gdb调试中出现optimized out
  2. 2017-2018-2 1723《程序设计与数据结构》每周成绩 (更新完毕)
  3. ubuntu packege下载网址
  4. Linux下C语言进程通讯编程
  5. 在线HTML转JSX工具
  6. FFmpeg Android 学习(一):Android 如何调用 FFMPEG 编辑音视频
  7. 2016年度太和顾问北京高科技行业人力资本数据信息发布
  8. java——关于数组的定义 和 访问修饰符的修饰内容
  9. 寻找最大的K个数(下)
  10. 【项目经理之修炼】 全文索引