C++杜绝“野指针”
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++杜绝“野指针”相关推荐
- C++中野指针问题以及如何杜绝野指针
"野指针"不是NULL指针,是指向"垃圾"内存的指针.人们一般不会错用NULL指针,因为用if语句很容易判断.但是"野指针"是很危险的,if ...
- C和C++中的野指针问题
文章目录 1 C和C++中的野指针问题 1.1 野指针的概念 1.2 野指针的由来 1.3 杜绝野指针的基本原则 2 C和C++中的常见内存错误 2.1 常见内存错误 2.2 内存操作的基本规则 1 ...
- C++中的野指针问题
文章目录 1 C和C++中的野指针问题 1.1 野指针的概念 1.2 野指针的由来 1.3 杜绝野指针的基本原则 2 C和C++中的常见内存错误 2.1 常见内存错误 2.2 内存操作的基本规则 1 ...
- 一个双线程下同一时候操作指针变量导致野指针出现的问题总结
来源:http://blog.csdn.net/lezhiyong 问题: 在某项目的測试过程中,測试在高清压力測试过程中会偶尔出现RSS崩溃现象,崩溃时间不确定,因为在守护进程服务的守护下,RSS崩 ...
- 关于memset,malloc以及free后的野指针误区详解
1.首先来看看memset这个函数 void *memset(void *s, int c, size_t n); memset函数的功能是将一段内存初始化为某个特定的值,并且初始化内存是以内存为单位 ...
- 021-C++中野指针
/*** 1. 未初始化和非法的指针* 例子:* int *a; // 注意: a这里指向哪里?不确定会指向哪里 这里会发生什么* *a = 12;* 运气好的话:定位到一个非法地址,程序会出错,从而 ...
- iOS多线程同时操作同一内存造成野指针
iOS多线程同时操作同一内存造成野指针 iOS多线程同时操作同一内存造成野指针,原因:崩溃线程崩中使用指针的真正创建与销毁地方在另另外一个线程中,崩溃线程只是使用这个指针拷贝. 这两个操作发送在两个线 ...
- 【C++】野指针及其危害
[C++] 野指针及其危害 引言:小白在初期敲代码时最可能碰到的问题之一估计就是野指针了,因为它在写程序的时候一不注意就写出来了,且不容易被发现,调试半天可能也不会出结果.去找大佬一看,其实就是一个很 ...
- Go 知识点(19)— Go 语言中的野指针
野指针是一种指向内存位置是不可知的指针,一般是由于指针变量在声明时没有初始化所导致的.在 Go语言中,布尔类型的零值为 false,数值类型的零值为 0,字符串类型的零值为 "", ...
最新文章
- 246.三元图的应用与绘图实战
- 8核移动处理器时代来临
- 石墨烯新新新应用,MIT大规模生产细胞大小机器人,有感知能存储
- Theano3.4-练习之多层感知机
- 2013年工作中遇到的20个问题:181-200
- python处理3000个excel-Python处理Excel数据的坑,一文让你不用重复犯错
- linux环境下获取真实的ip地址
- gifcam使用缩小内存_Fedora 上的桌面环境内存占用测试 | Linux 中国
- ef mysql modelfirst_MySQL –EF edmx(Model First)– Sql Server table
- 《大数据》2015年第2期“研究”——特异群组挖掘:框架与应用
- Ubuntu 删除dash 中无效的图标
- word横向网格线设置在哪里_word排版技巧:如何防止行距随字号而改变?
- 2019.8.1正则二
- 桥牌笔记:挤牌的条件之一,调整赢墩到只差一墩
- netty实现gmssl_gmssl国密总结
- 瑞利衰落信道仿真---Clarke Jakes Zheng模型(含matlab程序)
- ShadowGun Deadzone 放出 GM Kit Mod 包
- 艾默生黑色无线电池701PBKKF
- Flutter Connection to **** was not upgraded to websocket
- Django框架学习记录(3)