c++,为什么可以delete空指针,不可以delete野指针 [问题点数:5分,结帖人u012967494]

一键查看最优答案

确认一键查看最优答案?
本功能为VIP专享,开通VIP获取答案速率将提升10倍哦!
Bbs1
本版专家分:0
结帖率 100%
Bbs3
本版专家分:734
C++:野指针
一、概念 野<em>指针</em>:指向一个已删除的对象或者申请访问受限内存区域的<em>指针</em>。 二、产生原因 2.1 定义时未初始化 2.2 释放后未置<em>空</em> 2.3 <em>指针</em>操作超出作用域 三、危害 内存泄漏 3.1指向不可访问地址(程序报错) 3.2 指向可用或无明确意义的<em>空</em>间(程序运行) 3.3 指向可用且正被使用的<em>空</em>间(程序崩溃,或数据损坏) 四、如何避免 4.1 初始化 初始化...
指针与野指针
1.<em>空</em>类型<em>指针</em> 首先什么是<em>空</em>类型呢,<em>空</em>类型就是void,自然,<em>空</em>类型<em>指针</em>就是void * 2.<em>空</em>类型<em>指针</em>的作用 void * 可以指向任何类型对象的地址,表示这是一个<em>指针</em>,和地址值有关,但不知道存储在此地址上的对象的类型,所以在取<em>空</em>类型<em>指针</em>所指向的值的时候,应将<em>空</em>类型<em>指针</em>转换为对应的<em>指针</em>类型 int a = 10; <em>c</em>har b = 'a'; float <em>c</em> = 12.0; void...
C++中,能不能delete指针
完全可以 . . . . 可能有不少人对Delete删除<em>空</em><em>指针</em>的用法不屑一顾 , 但在实际运用当中 ,  却有不少人会犯类似的错误 , 最典型的如下: if(pMyClass) //这里, pMyClass是指向某个类的<em>指针</em> . . {    <em>delete</em> pMyClass ; }  他们往往先判断一下<em>指针</em>是否为<em>空</em> , 如果不为<em>空</em> , 说明没有被删除 ,  于是清<em>空</em>这个<em>指针</em> . . . 出发点和逻...
指针使用delete是安全的
对于分配和销毁<em>空</em>间的一些说明
C++在delete指针之后是否要置为null
<em>delete</em>一个<em>指针</em>之后,只是回收<em>指针</em>指向位置的<em>空</em>间,而<em>指针</em>本身的值不变(也就是说还是指向那个地址的)。你需要手工将其赋值为NULL。 现在对于printf的反汇编代码不太熟悉,以后写个实例分析一下。
C++指针delete后赋值为NULL的一些问题
C++标准规定:<em>delete</em><em>空</em><em>指针</em>是合法的。 p=NULL后p指向0x0这个地址,NULL其实就是0x0,多次对0x0进行操作,系统默认合法。 对于非<em>空</em><em>指针</em><em>delete</em>后若未赋值为NULL,p将成为一个非法<em>指针</em>(野<em>指针</em>),后续代码如果使用到该<em>指针</em>有可能会造成系统崩溃(内存不可以读不可写),或者,破坏自身有效内存数据(释放后,又在申请作为别的用途,恰巧系统分配了同一块内存),再次<em>delete</em>系...
delete指针以后应赋值为NULL
<em>delete</em><em>指针</em>以后应赋值为NULL <em>delete</em> p后,只是释放了<em>指针</em>中存放的地址中的内存<em>空</em>间。但是<em>指针</em>变量p仍然存在(即<em>指针</em>p本身所占有的内存),且p中存放的地址还是原来的地址。 例如:对一个非<em>空</em><em>指针</em><em>delete</em>后,若没有将p赋为NULL,若再次<em>delete</em>的话,会出现问题。如下代码: #in<em>c</em>lude &lt;iostream&gt; int main() { int* p = ne...
指针的产生及其危害
深是
什么是野指针?应该如何避免?
什么是野<em>指针</em>?应该如何避免? 野<em>指针</em>:指向不确定地址的<em>指针</em>变量。(即没有初始化)
关于C++中野指针的说明
野<em>指针</em>,也就是指向不可用内存区域的<em>指针</em>。通常对这种<em>指针</em>进行操作的话,将会使程序发生不可预知的错误。
当一个对象指针delete后如何判断该指针指向对象已被delete
析构函数内没做特殊处理 <em>delete</em>后没有将<em>指针</em>置为NULL
指针和悬指针
野<em>指针</em>: 野<em>指针</em>指向一个已删除的对象或未申请访问受限内存区域的<em>指针</em>。与<em>空</em><em>指针</em>不同,野<em>指针</em>无法通过简单地判断是否为 NULL避免,而只能通过养成良好的编程习惯来尽力减少。对野<em>指针</em>进行操作很容易造成程序错误。 (1)成因 野<em>指针</em>主要是因为这些疏忽而出现的删除或申请访问受限内存区域的<em>指针</em>。 a.<em>指针</em>变量未初始化:任何<em>指针</em>变量刚被创建时不会自动成为NULL<em>指针</em>,它的缺省值是随机的,它会乱指一气。
删除一个指针之后要置为NULL
删除一个<em>指针</em>之后可不要就跟着悲剧了啊……       众所周知,最开始我们用new来创建一个<em>指针</em>,那么等我们用完它之后,一定要用<em>delete</em>将该<em>指针</em>删掉。但是,值得注意的是,难道就仅仅是删除这个<em>指针</em>这么简单的么?下面,我们用一个程序来说明这个问题: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1
C++中delete指针后,要将其赋值为NULL的具体原因
<em>delete</em><em>指针</em>后,只是释放了<em>指针</em>指向的内存<em>空</em>间,但是<em>指针</em>还在,并且指向之前的地址。 举个例子: #in<em>c</em>lude &amp;lt;iostream&amp;gt; using namespa<em>c</em>e std; int main() { int *p=new int; *p=3; <em>c</em>out&amp;lt;&amp;lt;&quot;将3赋给p的地址后,<em>指针</em>p读取的值:&quot;&amp;lt;&amp;lt;*p&amp;lt;&amp;lt;end...
不小心产生野指针的3种情况
野<em>指针</em>的危害: 野<em>指针</em>不会被你检测到 假如一个<em>指针</em>使用释放后, 没有置为NULL, 那么他还是有指向的 很长时间后, 我们不小心用到这个<em>指针</em>,对其进行判断 if(NULL != p) { ... } 这种方式知识看似进行了检查,对野<em>指针</em>来说 ,实则是无用的检查 很容易产生错误,所以我们要对野<em>指针</em>产生的几种情况详细了解,避免野<em>指针</em>的产生 /* 野<em>指针</em> ...
指针的3种常见情况
1 .局部<em>指针</em>变量没有被初始化。 int main() { <em>c</em>har *p; str<em>c</em>py(p,"hello world");//p<em>指针</em>是局部变量<em>指针</em>,没有被初始化,所以p<em>指针</em>所指的内存区不确定,也就是p的内容不确定 //所以用str<em>c</em>py给p<em>指针</em>指向的内存区赋值,这个过程也不确定。       p = "hello world"; 将字符串常量 "hello world"的地
指针的成因,危害以及避免方法
概念:指向了一块随机内存<em>空</em>间,不受程序控制。如<em>指针</em>指向已经被删除的对象或者指向一块没有访问权限的内存<em>空</em>间,之后如果对其再解引用的话,就会出现问题。 “野<em>指针</em>”产生的原因: <em>指针</em>定义时未被初始化:<em>指针</em>在被定义的时候,如果程序不对其进行初始化的话,它会指向随机区域,因为任何<em>指针</em>变量(除了stati<em>c</em>修饰的<em>指针</em>变量)在被定义的时候是不会被置<em>空</em>的,它的默认值是随机的。 <em>指针</em>被释放时没有被置<em>空</em>...
指针指针一样么?
<em>c</em>har *q; <em>c</em>har *p; p->NULL; //野<em>指针</em>和<em>空</em><em>指针</em>(p和q)一样么,不一样的话有什么区别?
C++ 使用delete删除指针
众所周知,最开始我们用new来创建一个<em>指针</em>,那么等我们用完它之后,一定要用<em>delete</em>将该<em>指针</em>删掉。但是,值得注意的是,难道就仅仅是删除这个<em>指针</em>这么简单的么?下面,我们用一个程序来说明这个问题:   #in<em>c</em>lude 02 using namespa<em>c</em>e std; 03
C++ 中delete指针
今天写了一些代码给同事review的时候,同事指出我有一个地方对<em>空</em><em>指针</em><em>指针</em>的判断是不必要的。记录在此作为提醒。 局部的代码是这样的 if(fail) <em>c</em>ontinue; <em>delete</em> mat<em>c</em>hes; mat<em>c</em>hes = 0; return <em>c</em>ontext->getItemFa<em>c</em>tory()-><em>c</em>reateBo
我真是孤陋寡闻了,今天才知道NULL指针是可以直接delete
以前一直以为得先判断非<em>空</em>再<em>delete</em>,貌似当初学的时候老师给的示例代码也是先判<em>空</em>滴,还记得有个曾被广泛使用的宏 #define SAFE_DELETE(p) {if (p) <em>delete</em> p;} 话
C语言指针越界与野指针
野<em>指针</em> 1,<em>指针</em>变量未初始化 2,<em>指针</em>变量直接释放,没有置NULL 3,<em>指针</em>变量超越了其指向变量的作用范围,这种情况下,其所指向的变量已经不存在,而我们认为对<em>指针</em>进行操作依然指向该变量,这种情况危害最大。 如果对野<em>指针</em>进行了操作,那么很有可能造成不可预计的后果,因为你不知道野<em>指针</em>指向的内存区域的具体情况。 野<em>指针</em>不做过多的介绍,要通过养成良好的编程习惯,尽量避免野<em>指针</em>的存在。
指针 和 悬指针(引用)
野<em>指针</em>:未初始化的<em>指针</em>,其<em>指针</em>内容为一个垃圾数。 悬<em>空</em><em>指针</em>:<em>指针</em>正常初始化,曾指向过一个正常的对象,但是对象销毁了,该<em>指针</em>未置<em>空</em>,就成了悬<em>空</em><em>指针</em>。 int main() { int *p; // <em>指针</em>未初始化,此时 p 为野<em>指针</em> int *pi = nullptr; { int i = 6; pi = &amp;amp;i; // 此时 pi...
怎么判断一个指针是否为野指针
这类似错误真是防不胜防啊
函数返回导致 指针变成野指针?
大家好! 我在写B树删除操作的时候 遇到了一个奇怪的BUG, SwapOutPage 通过传t和pbl<em>指针</em>调用 swapOne 然后t<em>指针</em>在swapOne函数里好好的,到这个函数的 有大括号也还是好的
Q5:野指针是什么?
野<em>指针</em>。
C野指针简单理解
首先,野<em>指针</em>不能理解为指向NULL的<em>指针</em>。在编程中,都会对<em>指针</em>变量进行if判断,一旦发现了是NULL都会立即报错或者返回。因此NULL<em>指针</em>危险性不会很大。 野<em>指针</em>,应该理解为指向一个不合法地址的<em>指针</em>,
【C语言】传指针和解引用,野指针指针
一个函数的改变要影响另一个函数需要两个条件: 1、传<em>指针</em>。 2、解引用。 通过交换a和b数值的实例来说明其重要性: 在主函数中输入a和b的值;int a = 10;int b = 20;预期输出结果为a = 20;b = 10。 1、 明显与预期结果不符。原因:没有传<em>指针</em>! 2、 具体操作为: 也与预期结果不符。原因:没有解引用。 3、 与预期相符,多测试几组有代表性的数...
指针的定义和避免
1.我们知道在程序中使用了一个野<em>指针</em>,会引起程序出错,造成段错误。下面我举一个例子指出野<em>指针</em> #in<em>c</em>lude int main() { <em>c</em>har *str; printf("input a str\n"); s<em>c</em>anf(" %s", str); printf("%s\n", str); return 0; } 下面我对*str进行赋值,
如何判断指针是否有效的问题。
我有一个工作线程,需要接受外部消息,消息分为两种,一种是带结构体参数的,第二种带的参数是常数, 我每次收到消息后会解析结构体,如果是第二种没有带结构体参数的消息,会崩溃。 UINT Class::Th
C++判断指针是否为
我有两个类,A类调用B类,在A类里声明 B* b; 在函数里使用的时候 if(b) { ... } 正常情况下,在我没有new一个新实例之前,这段if是应该不跑的,但是我目前发现b=0X<em>c</em>d<em>c</em>d<em>c</em>d<em>c</em>
什么方法可以判断指针是否有效?
什么方法可以判断<em>指针</em>是否有效?
指针的判别 - 学自另一个项目组
公司另一个项目组的同事,昨天做了讲座:一个野<em>指针</em>的处理方案。 先看一个典型的野<em>指针</em>: #in<em>c</em>lude #in<em>c</em>lude using namespa<em>c</em>e std; //=========================================================== <em>c</em>lass Player { string _name; publi<em>c</em>: Player(<em>c</em>on
指针出现的三种情况
昨天面试被问到“你了解野<em>指针</em>吗”,我的回答是“野<em>指针</em>就是没有初始化的<em>指针</em>,这样的<em>指针</em>会随机指向一块内存,野<em>指针</em>会对系统造成破坏(造成内存泄漏)”。面试官又问到,“为什么会有野<em>指针</em>这个概念?”。我只是回答了”<em>指针</em>没有初始化就会变成野<em>指针</em>“。 事实上野<em>指针</em>出现的情况有三种: 1、<em>指针</em>变量未初始化 2、<em>指针</em>释放之后未置<em>空</em> 3、返回指向栈内存的<em>指针</em> 我们如何避免野<em>指针</em>呢?做法如下: ①定义一个...
delete 指针的问题。很着急。希望解答下
std::ve<em>c</em>tor m_Items; for(size_t i=0; iRequestId
c++中delete与NULL的效果
对一个<em>指针</em>来说,使用<em>delete</em>与NULL的效果,前者是释放<em>指针</em>指向的内存<em>空</em>间,而后者是释放<em>指针</em>所在的内存。我的这种看法对吗?求高手指导
什么是野指针
什么是野<em>指针</em>?   一个母亲有两个小孩(两个<em>指针</em>),一个在厨房,一个在卧室,(属于不同的代码块,其生存期不同)母亲让在厨房的小孩带一块蛋糕(<em>指针</em>指向的对象)给在卧室的小孩,这样在卧室的孩子才肯写作业。但这个在厨房的小孩比较淘气,他在走出厨房时自己将蛋糕吃了,没能带出来。而在卧室的没有吃到蛋糕,所以不肯完成他的作业。结果母亲却不知道卧室的孩子没有吃到蛋糕,还以为作业完了。结果第二天她就被老师召唤到
C++指针delete后还要置为null
众所周知,最开始我们用new来创建一个<em>指针</em>,那么等我们用完它之后,一定要用<em>delete</em>将该<em>指针</em>删掉。但是,值得注意的是,难道就仅仅是删除这个<em>指针</em>这么简单的么?下面,我们用一个程序来说明这个问题:[<em>c</em>pp] view plain <em>c</em>opy#in<em>c</em>lude &amp;lt;iostream&amp;gt;  using namespa<em>c</em>e std;  int main()   {      int *p=new in...
[c++] delete 只有声明没有定义的指针时遇到的问题
今天遇到这样一个问题: <em>c</em>lass AParent 有一个成员 BParent* ptr 初始化为 nullptr <em>c</em>lass AChild 作为 AParent 的子类,ptr = new BChild , 其中 BChild 是 BParent 的子类 为了减少编译时的依赖, AParent.h 上面声明了 <em>c</em>lass BParent; 在 AParent.<em>c</em>pp 里面虽然调用了 <em>delete</em>...
C++ 利用set为vector数组去重
#in<em>c</em>lude #in<em>c</em>lude #in<em>c</em>lude using namespa<em>c</em>e std; int main() { ve<em>c</em>tor ve<em>c</em>; ve<em>c</em> = { 1, 2, 3, 4, 8, 9, 3, 2, 1, 0, 4, 8 }; set st(ve<em>c</em>.begin(), ve<em>c</em>.end()); ve<em>c</em>.assign(st.begin(), st.end());
进程 线程 通信
Linux进程间通信:管道、信号、消息队列、共享内存、信号量、套接字(so<em>c</em>ket) Linux线程间通信:互斥量(mutex),信号量,条件变量 Windows进程间通信:管道、消息队列、共享内存、信号量 (semaphore) 、套接字(so<em>c</em>ket) Windows线程间通信:互斥量(mutex),信号量(semaphore)、临界区(<em>c</em>riti<em>c</em>al se<em>c</em>tion)、事件(even...
进程ipc和线程ipc
每个进程有自己的地址<em>空</em>间。两个进程中的地址即使值相同,实际指向的位置也不同。进程间通信一般通过操作系统的公共区进行。 同一进程中的线程因属同一地址<em>空</em>间,可直接通信。 不仅是系统内部独立运行的实体,而且是独立竞争资源的实体。 线程也被称为轻权进程,同一进程的线程共享全局变量和内存,使得线程之间共享数据很容易也很方便,但会带来某些共享数据的互斥问题。 许对程序为了提高效率也都是用了线程来编写。 父子进...
指针,野指针
<em>指针</em>:<em>指针</em>是什么?   <em>指针</em>是一个变量,它就是一个地址。它所占的<em>空</em>间是四个字节(32位的操作系统);   数组的名字就是一个<em>指针</em>常量,常量是不能改变的;   int *p;   p:<em>指针</em>的变量所对应的<em>空</em>间值是指是指分配到<em>空</em>间里面的值; *p:<em>指针</em>所指向的<em>空</em>间的值是指<em>指针</em>所分配里面<em>空</em>间里的值(地址)的所对应的<em>空</em>间的值;    野<em>指针</em>:是指<em>指针</em>随机指向内存中的内存,导致内存的泄漏;
c/c++:内存泄露和野指针的概念
内存泄漏  用动态存储分配函数动态开辟的<em>空</em>间,在使用完毕后未释放,结果导致一直占据该内存单元,不能被任何程序再次使用,直到程序结束。即所谓内存泄漏。    注意:内存泄漏是指堆内存的泄漏。  简单的说就是申请了一块内存<em>空</em>间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个<em>指针</em>指向它,那么这块内存就泄露
c++ C6011 取消对 NULL 指针“L”的引用
-
指针理解和处理
<em>指针</em>是个很强大的工具,可是正因为它太强大,所以要操作它不是件易事。操作不当造成的野<em>指针</em>,甚至会引起系统死机等比较严重的后果。   如果程序定义了一个<em>指针</em>,就必须要立即让它指向一个我们设定的<em>空</em>间或者把它设为NULL,如果没有这么做,那么这个<em>指针</em>里的内容是不可预知的,即不知道 它指向内存中的哪个<em>空</em>间(即野<em>指针</em>),它有可能指向的是一个<em>空</em>白的内存区域,可能指向的是已经受保护的区域,甚至可能指向系统的关键内
指针怎么会出问题呢,
-
C++进阶与拔高(九)(C++内存管理)(智能指针与内存泄漏)
第四章 C++内存管理        C++内存管理几乎存在于程序设计的方方面面,内存泄漏在每个C++程序中都有可能发生。参考网上大佬的博客,我们在这章对C++内存管理有一个大致的认识。本章包括内存管理,内存泄漏以及内存回收。C++测试岗位和开放岗位的面试很看重这一部分,因此很有必要说一下。本章讲解的内容均来自于博客:        http://<em>c</em>nblogs.<em>c</em>om/qiubole/ar<em>c</em>...
C++两个 delete 后的问题 野指针
最近在网上看到两个关于<em>指针</em> <em>delete</em> 后的问题。第一种情况:1 2 3 int* p = new int; <em>delete</em> p; <em>delete</em> p;// p为什么能<em>delete</em>两次,而程序运行的时候还不报错。 第二种情况:1 2 3 int* p = new int ; <em>delete</em> p; *p = 5; //<em>delete</em>后对*p进行再赋值居然也可以(他的平台上运行并没有引发什么错误)?...
指针和野指针有什么区别?
野<em>指针</em>:野<em>指针</em>指,访问一个已删除或访问受限的内存区域的<em>指针</em>,野<em>指针</em>不能判断是否为NULL来避免。产生的原因1、<em>指针</em>变量未初始化化。<em>指针</em>变量默认的值不是NULL,而是随机指。                  2、free/<em>delete</em>的<em>指针</em>没有置为<em>空</em>。free/<em>delete</em> 只是释放<em>指针</em>指的内存<em>空</em>间,并没有把<em>指针</em>本身释放掉                  3、<em>指针</em>指向了栈上的引用或<em>指针</em>。因为栈上...
指针(转帖一篇)
野<em>指针</em>,也就是指向不可用内存区域的<em>指针</em>。通常对这种<em>指针</em>进行操作的话,将会使程序发生不可预知的错误。“野<em>指针</em>”不是NULL<em>指针</em>,是指向“垃圾”内存的<em>指针</em>。人们一般不会错用NULL<em>指针</em>,因为用if语句很容易判断。但是“野<em>指针</em>”是很危险的,if语句对它不起作用。野<em>指针</em>的成因主要有两种:一、<em>指针</em>变量没有被初始化。任何<em>指针</em>变量刚被创建时不会自动成为NULL<em>指针</em>,它的缺省值是随机的,它会乱指一气。所以
navicat 注册码,自己试过,可以的
NAVN-LNXG-XHHX-5NOO拿走,不谢。
navicat can not load oci dll,193,126
Navi<em>c</em>at报193,126这两个错误是因为Navi<em>c</em>at的版本和Ora<em>c</em>le客户端的o<em>c</em>i版本不一致,遇到这个坑也是第二次了,记录下。Navi<em>c</em>at装的是x64版本的,o<em>c</em>i用的是x86的就会出现了,所以我后面就把Navi<em>c</em>at换成x86的就OK了,当然或者你把ora<em>c</em>le的o<em>c</em>i换成x64也行。这里提供下Navi<em>c</em>at x86和Ora<em>c</em>le x86的o<em>c</em>i整个客户端套件。 下面附下Navi
Navicat11全系列激活(注册机)
http://www.<em>c</em>nblogs.<em>c</em>om/JKayFeng/p/5937595.html 激活 Navi<em>c</em>at是一款商业软件,所以他仅提供试用。 下面介绍一下通过注册机的方式激活Navi<em>c</em>at 11 for Windows系列软件的方法。 工具:navi<em>c</em>at注册机.7z 提取码:RZC9 1、 安装 Navi<em>c</em>at 11 for Windows 系列原版程序。
指针是什么?悬指针和野指针区别?
野<em>指针</em>是什么? 野<em>指针</em>:指向内存被释放的内存或者没有访问权限的内存的<em>指针</em>。 “野<em>指针</em>”的成因主要有3种: <em>指针</em>变量没有被初始化。任何<em>指针</em>变量刚被创建时不会自动成为NULL<em>指针</em>,它的缺省值是随机的。所以,<em>指针</em>变量在创建的同时应当被初始化,要么将<em>指针</em>设置为NULL,要么让它指向合法的内存。 <em>指针</em>p被free或者<em>delete</em>之后,没有置为NULL; <em>指针</em>操作超越了变量的作用范围。 为了避免出现野...
这个野指针不?为什么可以使用?
#in<em>c</em>lude #in<em>c</em>lude using namespa<em>c</em>e std; <em>c</em>lass A { publi<em>c</em>: void prinfs() { <em>c</em>out<
c++ 调用野指针后的行为
<em>c</em>lass A{ publi<em>c</em>: int i; B* b; A(int _i)i(_i){} void test(){ i++; if(b)b->do_something(); } } int ma
指针(概念,产生原因,危害,避免方法)
思维导图: 1.野<em>指针</em>与垂悬<em>指针</em>的区别: 野<em>指针</em>:访问一个已销毁或者访问受限的内存区域的<em>指针</em>,野<em>指针</em>不能判断是否为NULL来避免 垂悬<em>指针</em>:<em>指针</em>正常初始化,曾指向一个对象,该对象被销毁了,但是<em>指针</em>未制<em>空</em>,那么就成了悬<em>空</em><em>指针</em>。 2.概念 <em>指针</em>指向了一块随机的<em>空</em>间,不受程序控制。 3.野<em>指针</em>产生的原因: 1.<em>指针</em>定义时未被初始化:<em>指针</em>在被定义的时候,如果程序不对其进行初始化的话,它会随机指向一个区...
C语言中的野指针问题
C语言中的野<em>指针</em>问题一、野<em>指针</em>       1、<em>指针</em>变量中的值是非法内存地址,进而形成野<em>指针</em>       2、野<em>指针</em>不是NULL<em>指针</em>,是指向不可用内存地址的<em>指针</em>       3、NULL<em>指针</em>并无危害,很好判断,也很好调试       4、C语言中无法判断一个<em>指针</em>所保存的地址是否合法二、野<em>指针</em>由来      1、局部<em>指针</em>变量没有初始化      2、<em>指针</em>所指向的变量在<em>指针</em>之前被销毁      3、使...
在C++中,能不能delete指针
有如下程序: <em>c</em>har *p = NULL; <em>delete</em> p; 请问以上程序运行会有问题吗?
【C++进阶】C++中的指针和野指针
<em>空</em><em>指针</em>常量,<em>空</em><em>指针</em>,<em>空</em><em>指针</em>赋值区以及野<em>指针</em>及其形成原因
指针概念
“野<em>指针</em>”不是NULL<em>指针</em>,是指向“垃圾”内存的<em>指针</em>。人们一般不会错用NULL<em>指针</em>,因为 用if语句很容易判断。但是“野<em>指针</em>”是很危险的,if语句对它不起作用。 “野<em>指针</em>”的成因主要有两种: (1)<em>指针</em>变量没有被初始化。任何<em>指针</em>变量刚被创建时不会自动成为NULL<em>指针</em>,它的缺省值是随机的,它会乱指一气。所以,<em>指针</em>变量在创建的同时应当被初始化,要么将<em>指针</em>设置为NULL,要么让它
什么是野指针
这里面的NULL指的是<em>空</em><em>指针</em> ,不指向任何单元,仅仅表示初始化 ;4.4.1 野<em>指针</em>野<em>指针</em>出现的现象 :1. 定义了以后 ,没有给地址赋值 ;2. 地址释放了以后 ,<em>指针</em>没有指NULL; 避免野<em>指针</em> :1.定义的时候 =NULL;使用前赋值;2. 释放的时候 ;free(p);                     p=NULL; 3. assert(NULL !=p)------函数的入口处 ...
C++删除指针的一个坑
最近使用了项目公共库中看起来很稳定的一个消息队列类(前同事留下的),起初用得还挺好。后来程序中突然出现了内存暴涨的情况,最后定位下来是这个类的问题。随后花了一些时间定位出现问题的代码,其实在DEBUG时都没有找到问题代码,真正找到问题是凭着感觉在一堆代码里揪出了这样一句话:<em>delete</em> (void*)lParam; 灵感突现,这句应该有问题。当时在办公室,不能上网且手里又没有现成的参考资料,于是随
C++指针释放问题
https://blog.<em>c</em>sdn.net/u011473714/arti<em>c</em>le/details/50783850 今天看到了一个问题,其实在项目中也经常遇到<em>指针</em>释放的问题,先看看一个简单的<em>指针</em>释放的问题: **************************************   问题如下: (1)一般在<em>c</em>++类中有成员<em>指针</em>的话,会在类的析构函数里释放(delet...
指针(Dangling pointer)避免方法
什么是悬<em>空</em><em>指针</em>? 一个<em>指针</em>所指的内存被释放后,这个<em>指针</em>就被悬<em>空</em>了。 悬<em>空</em><em>指针</em>的危害? 访问悬<em>空</em><em>指针</em>,结果随机。可能导致程序功能不正常,也可能导致程序崩溃。如果受到影响的是其它功能,问题通常很难定位。 如何避免悬<em>空</em><em>指针</em>? 基本思路:在释放一块内存时,将指向这块内存的<em>指针</em>变量设置为NULL。访问<em>指针</em>变量前,先判断是否为NULL。 进阶:当有多个<em>指针</em>变量都指向同一块内存时,释放这块内存时,需...
谈谈你对野指针的理解?
谈谈你对野<em>指针</em>的理解?   野<em>指针</em>不是NULL<em>指针</em>,是指向“垃圾”内存的<em>指针</em>。即它是随机指向的,系统自动对其初始化。   野<em>指针</em>会造成什么样的后果呢? 最大的问题:它会导致内存泄漏。   什么叫作内存泄漏? 指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
这样会造成野指针么?
<em>c</em>lass obj { private: int a; publi<em>c</em>: obj() { a=10; } obj(int x):a(x) {} }; void temp() { obj* p1=new
C++在delete指针后要赋值为NULL
C++标准规定:<em>delete</em><em>空</em><em>指针</em>是合法的,没有副作用。 所以我们在Delete<em>指针</em>后赋值为NULL或0是个好习惯。对一个非<em>空</em><em>指针</em><em>delete</em>后,若没有赋NULL,若再次<em>delete</em>的话 有可能出现问题。如下代码: 可以看出<em>delete</em>是释放<em>指针</em>指向的内存,并不是<em>指针</em>本身所占有的内存。所以<em>delete</em>后,<em>指针</em>的还是指向那块区域,并 未清0,所以如果下次用到,就会发生xxx<em>空</em>间不
关于野指针的一些问题与总结
void Test(void){<em>c</em>har *str = (<em>c</em>har *) mallo<em>c</em>(100);str<em>c</em>py(str, “hello”);free(str);    if(str != NULL){  str<em>c</em>py(str, “world”);  printf(str);} 请问运行Test函数会有什么样的结果?答:篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,st...
delete 一个NULL地址不会有任何问题
通常,我们new一个对象,就要调用<em>delete</em>释放对象。 如下: int * nCount = new int; <em>delete</em> nCount;      // 正确 如果: int * nCount; <em>delete</em> nCount;      // 错误 因为nCount没有指定内容,所以释放会错误。 再如果: int * nCount = NULL
c++ 中删除一个 NULL pointer (指针
1. 在 <em>c</em>++ 中删除一个 NULL pointer (<em>空</em><em>指针</em>)是安全的 2. 标准中相关内容如下: "In either alternative, if the value of the operand of <em>delete</em> is the null pointer the operation has no effe<em>c</em>t." 3. 一个有用的宏 #define my_<em>delete</em>(x) {<em>delete</em> x; x = NULL;}4. 更好的方法使用RAii更为优雅的方式是使用 smart poin
free/delete与野指针
一、free与<em>delete</em>把<em>指针</em>怎么了?         用free或<em>delete</em> 作用于指向堆内存的<em>指针</em>上,发生了什么?        它们只是把<em>指针</em>指向的内存释放掉,而并没有把<em>指针</em>本身释放掉,甚至连<em>指针</em>的值都没有改变。即,它们作用于<em>指针</em>,并没有改变<em>指针</em>指向的地址,而只是把该地址处的内存释放掉了,或者说该地址对应的内存是垃圾。        如:        <em>c</em>har
使用delete删除指针
原文:http://blog.sina.<em>c</em>om.<em>c</em>n/s/blog_6405313801013jvg.html 用<em>delete</em>命令处理某个<em>指针</em>,说是把那个<em>指针</em>删除了是不正确的。 <em>delete</em>命令指示释放了那个<em>指针</em>原本所指的那部分内存而已。被<em>delete</em>后的<em>指针</em>p的值(地址值)并非就是NULL,而是随机值。 也就是被<em>delete</em>后,如果不再加上一句p=NULL,p就成了“野<em>指针</em>”,在内存里乱指
C++删除NULL指针是否安全?
忽然把这忘记了,谁指点一下。
C++new与delete以及指针
初学C++,把一些自己专研的知识记录一下,分享给大家,希望更多人的能看到!
for循环中移除元素的指针
//剔除有冲正交易的记录 IteratorTradeOrderLogEntity> tradeOrderLogEntityIterator = tradeOrderLogEntityList.iterator(); for (;tradeOrderLogEntityIterator.hasNext();){ TradeOrderLogEntity
指针问题,为什么这样不能释放
倒数第二行,将分配的内存的<em>指针</em>赋值为NULL,为什么会报错呢?不解,环境:vs2013+win8 #define _CRT_SECURE_NO_WARNINGS #in<em>c</em>lude #
如何解决野指针的问题
在一个Frame里有一个函数,该函数想实现释放掉这个Frame,但是调用this->Free()或者<em>delete</em> this之后,虽然该实例被释放了,但是<em>指针</em>仍然指向垃圾内存,如何在Frame里令该<em>指针</em>
预防野指针的几种方法
野<em>指针</em>,又称迷途<em>指针</em>,即指向“垃圾”内存的<em>指针</em>。此时<em>指针</em>指向的内存已被操作系统回收,程序已无法再访问。
free 与 delete 区别
1. <em>delete</em> 用于释放 new 分配的<em>空</em>间,free 有用释放 mallo<em>c</em> 分配的<em>空</em>间 2. <em>delete</em> [] 用于释放 new [] 分配的<em>空</em>间 3. <em>delete</em> 释放<em>空</em>间的时候会调用 相应对象的析构函数      顺便说一下new在分配<em>空</em>间的时候同时会调用对象的构造函数,对对象进行初始化,使用mallo<em>c</em>则只是分配内存 4. 调用free 之前需要检查 需要释放的<em>指针</em>是否为
指针产生原因及解决办法
情况一原因 <em>指针</em>变量声明时没有被初始化。解决办法 <em>指针</em>声明时初始化,可以是具体的地址值,也可让它指向NULL。情况二原因 <em>指针</em> p 被 free 或者 <em>delete</em> 之后,没有置为 NULL。解决办法 <em>指针</em>指向的内存<em>空</em>间被释放后<em>指针</em>应该指向NULL。情况三原因 <em>指针</em>操作超越了变量的作用范
指针指针
Person *p = [[Person allo<em>c</em>] init]; /* 只要一个对象被释放了,我们就称这个对象为“僵尸对象” 当一个<em>指针</em>指向一个僵尸对象,我们就称这个<em>指针</em>为“野<em>指针</em>” 只要给一个野<em>指针</em>发送消息就会报错 */ [p release]; // 1-1=0 /* <em>空</em><em>指针</em> nil 0
面试-野指针,悬挂指针
首先说明一点: 指向非法的内存地址(垃圾内存的地址),那么这个<em>指针</em>就是悬挂<em>指针</em>,也叫野<em>指针</em>,意为无法正常使用的<em>指针</em>。 野<em>指针</em>(悬挂<em>指针</em>): 野<em>指针</em>是指向不可用内存区域的<em>指针</em>(非法内存,垃圾内存)。野<em>指针</em>不是NULL<em>指针</em>,是指向“垃圾”内存的<em>指针</em>。人们一般不会错用NULL<em>指针</em>,因为if语句能够判断。但是野<em>指针</em>是很危险的,if不能判断一个<em>指针</em>是正常<em>指针</em>还是野<em>指针</em>。 野指
什么是野指针和内存泄漏?如何避免野指针
内存泄漏:①访问已经释放的内存     ②访问没有权限的内存 野<em>指针</em>:指向内存被释放的内存或者没有访问权限的内存的<em>指针</em>。 “野<em>指针</em>”的成因主要有3种: (1)<em>指针</em>变量没有被初始化。任何<em>指针</em>变量刚被创建时不会自动成为NULL<em>指针</em>,它的缺省值是随机的,它会乱指一气。所以,<em>指针</em>变量在创建的同时应当被初始化,要么将<em>指针</em>设置为NULL,要么让它指向合法的内存。例如 <em>c</em>har *
指针及其有效的避免方法
野<em>指针</em>的生成及其产生的原因 一,指向不确定地址的<em>指针</em>变量。(即没有初始化)使用野<em>指针</em>易因内存泄露出现段错误。而造成内存泄露的原因有两个: 1,访问了没有权限的内存,如果正确使用<em>指针</em>,系统会给<em>指针</em>分配相应的内存<em>空</em>间, 如果<em>指针</em>指向了的内存不是系统分配的,则判定为没有权限。 2,访问了已经释放的内存。 二,<em>指针</em>p被free或者<em>delete</em>之后,没有置为NULL,让人误以为p是个合法的<em>指针</em>。 ...
【linux c】什么是野指针以及如何避免野指针_学习笔记_010
1.首先以一个示例来认识野<em>指针</em>: #in<em>c</em>lude int main() { int * p; s<em>c</em>anf("%d", p); printf("%d\n", * p); return 0; } 该段程序编译并未报任何错误,而运行之后,输入具体值后,报段错误: 2 段错误   为什么会出现段错误? 因为此处定义了一个局部变量
指针,野指针指针,赋值?
bug中最可怕的是野<em>指针</em>,那么问题来了,野<em>指针</em>是什么?是如何产生的?为什么程序员会“忘记”? 昨天调试时,我发现了一个野<em>指针</em>,由此我明白了。 a的值成了乱码,而且g<em>c</em><em>c</em>编译器并没有报错,那么请看下面的代码 #in<em>c</em>lude int fun(int *a) { int i; *a=0;//添加的代码 for(i=0;i<10;i++) (*a)++; return
悬挂指针与野指针
悬挂<em>指针</em>/Dangling Pointers/迷途<em>指针</em>/悬垂<em>指针</em> 野<em>指针</em>/Wild Pointers
linux启动和配置下载
linux学习,linux启动和配置 相关下载链接:[url=//download.csdn.net/download/jiek9999/4176097?utm_source=bbsseo]//download.csdn.net/download/jiek9999/4176097?utm_source=bbsseo[/url]
Foxit PhantomPDF Business 5.1.2.0305 key下载
下载后解压,将fpmkey.txt复制到安装后的文件夹(默认路径:C:\Program Files\Foxit Software\Foxit PhantomPDF)里即可。 相关下载链接:[url=//download.csdn.net/download/xxgon/4295510?utm_source=bbsseo]//download.csdn.net/download/xxgon/4295510?utm_source=bbsseo[/url]
jdmkrt-jar包下载
jmx练习用的jar包,要不然需要去oracle官网去注册一个 相关下载链接:[url=//download.csdn.net/download/u014407201/10180011?utm_source=bbsseo]//download.csdn.net/download/u014407201/10180011?utm_source=bbsseo[/url]
相关热词 c#怎么调用api接口 c# 调用mstsc c#扩展函数 c#向上转换向下转换 c#chart直方图叠加 c# 添加body样式 c# 调用接口 c#高德地图经纬度查询 c# 测试并发 c# 取操作系统
我们是很有底线的