C++野指针的存在方式和误区
1.
char* x;这样的一定是野指针,指针声明时要直接初始化!或者置null也行!
2.
int main()
{
char *x=new char;
delete x;
cout<<*x;
getchar();
return ;
}
delete x;之后,x就是一个野指针。
int main()
{
char *x=new char[];
cout<<*x;
strcpy(x,"dqwdqw");
delete []x;
cout<<x;
getchar();
return ;
}
这段代码是能运行的,但delete[]x;之后,x就成为了一个野指针,输出的结果是未定义的。这里我们应该加上:
x=nullptr;
或者malloc之后free掉的指针,也是上面的情况,一定要把指针置null。
3.
函数参数为二级指针&p,将p指向了函数中的临时变量。函数调用完毕后,p这个指针就变为了野指针。
int f(char** x){
char p=; //'a'
*x=&p;
}
int main()
{
char a=; //'A'
char *x=&a;
f(&x);
cout<<*x;
getchar();
return ;
}
调用f(&x)结束后,指针x指向的值是未定义的。
牛批的来了,看下面代码,感觉会输出什么?
class T
{
public:
T (){
cout<<"f";
x=;
delete this;
}
int x;
}; int main()
{
T *p=new T();
cout<<p->x;
getchar();
return ;
}
一定觉得这代码会调用失败吧,实际上会调用成功。。
delete this之后,p变为野指针了。但是p依然是个地址。
然后系统就会按照T类的对象空间模型去访问,并输出它认为其中x所在空间的值。
当然这个值就不一定是啥了,但确实不会报错。。。
C++野指针的存在方式和误区的更多相关文章
- NULL指针、零指针、野指针
1.1.空指针 如果 p 是一个指针变量,则 p = 0; p = 0L; p = '\0'; p = 3 - 3; p = 0 * 17;p=(void*)0; 中的任何一种赋值操作之后, p 都成 ...
- 野指针及c++指针使用注意点
避免野指针的产生 “野指针”的成因主要有: 1)指针变量没有被初始化.任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气.所以,指针变量在创建的同时应当被初始化,要么将指 ...
- NULL指针 Void* 和野指针
在C和C++的语言中常常有这几个概念: NULL指针.空指针.Void *指针.野指针(Wild Pointer)甚至垂悬指针(Dangling Pointer). 1.NULL指针,一般用于指向一个 ...
- exc_bad_access(code=1, address=0x789870)野指针错误
原因: exc_bad_access(code=1, address=0x789870)野指针错误,主要的原因是,当某个对象被完全释放,也就是retainCount,引用计数为0后.再去通过该对象去调 ...
- c/c++:内存泄露和野指针的概念
内存泄漏 用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元.直到程序结束.即所谓内存泄漏. 注意:内存泄漏是指堆内存的泄漏. 简单的说就是申请了一块内存空间,使用 ...
- c++野指针 之 实战篇
一:今天做poj上的3750那个题,用到了list的erase方法.提交之后总是报runtime error! 纠结了好长时间.曾有一度怀疑过vector的erase和list的erase处理方式不一 ...
- C++三种野指针及应对/内存泄露
野指针,也就是指向不可用内存区域的指针.如果对野指针进行操作,将会使程序发生不可预知的错误,甚至可能直接引起崩溃. 野指针不是NULL指针,是指向"垃圾"内存的指 ...
- 关于空指针NULL、野指针、通用指针 (转)
reference:https://www.cnblogs.com/losesea/archive/2012/11/16/2772590.html 首先说一下什么是指针,只要明白了指针的含义,你就明白 ...
- C++的空指针、野指针和指针赋值NULL.md
1.空指针和野指针 http://blog.csdn.net/fu_zk/article/details/21030607 空指针常量 一个表示0值的整数常量,叫做空指针常量.例如:0.0L.1-1( ...
随机推荐
- curl 和 tcpdump
curl: 1.通常使用curl 来监控网址状态, #curl -m 5 -s -o /dev/null -w %{http_code} www.baidu.com #200 -m 设置访问超时时间, ...
- 如何分析和研究Log文件 ,如何看日志信息
如何分析和研究Log文件 ,如何看日志信息 . Log 在android中的地位非常重要,要是作为一个android程序员不能过分析log这关,算是android没有入门吧 . 下面我们就来说说如何处 ...
- [Python]JavaScript VS Python 函数
js function 相当于 python def js语句结束符; python为缩进符 JavaScript /*定义*/ function 函数名(参数1,参数2,参数3...){ 函数体 } ...
- lua学习之深入函数第二篇
深入函数 2 非全局的函数 函数是第一类值,函数可以存储到全局变量,局部变量,table 字段中 lua 函数库中的大部分函数存储到 table 字段中 Lib = {} Lib.foo = func ...
- js this是什么?[多次书写]
前言 以前的时候,我写了一个关于js this的博客,写的非常复杂,分析了各种情况. 现在我想简化. 如果你有后台基础,专门去理解过this,那么请忘记. 这东西是有口诀的: 在方法中,this 表示 ...
- 封装dropdown模块(使用到之前写好的动画组件,封装下拉菜单)
用 showhide 改写dropdown 模块: 1.首先在 css中新增动画相关样式 /*showhide组件的样式*/ .fadeOut{ opacity:; visibility: hidde ...
- sql数据库语言练习,增删改查
数据库创建 DROP DATABASE IF EXISTS `sql_invoicing`; CREATE DATABASE `sql_invoicing`; USE `sql_invoicing`; ...
- Leetcode:235. 二叉搜索树的最近公共祖先
Leetcode:235. 二叉搜索树的最近公共祖先 Leetcode:235. 二叉搜索树的最近公共祖先 Talk is cheap . Show me the code . /** * Defin ...
- Windows10访问Ubuntu子系统(WSL)的桌面环境
原文地址:https://blog.csdn.net/xmh19936688/article/details/90212960 Windows10访问Ubuntu子系统(WSL)的桌面环境文章目录Wi ...
- C#MVC实现为雇员配置角色(完整详细+数据库)
数据库创建“用户表”“角色表”“用户角色关系表” create table roles ( RId int identity, RName varchar(), Remark varchar() ) ...