lstd.net
当前位置:首页 >> C++关于nEw和DElEtE的问题,求正确答案和解答。 >>

C++关于nEw和DElEtE的问题,求正确答案和解答。

new分配的内存空间不会自动回收, 必须手动用delete来释放, 所以B是错误的, 记住new和delete是成对出现的, 还有就是malloc和free也是

你想弄懂这个问题,首先你要弄清楚数据的3种存储方式. 1.静态区: 全局变量. 2.堆: 程序执行是分配的内存 3.栈: 函数调用,局部变量. new出来的内存就是分配到堆上的.程序执行完以后,堆上分配的内存不会被操作系统自动回收

A1. new和delete一般要成对使用.new开辟内存,delete删除内存.A2.如果使用了new不delete程序会怎么样?这个要看你的程序.反正你要知道,new的内存如果不delete,该程序结束之前,这个内存不会释放掉.也就是说如果你的程序中常常new一些内存而不delete,你的程序占用的内存会不断增大.但是有一些全局数据,可以new了不delete,在程序开始运行时,创建这些数据,程序运行过程中使用这些数据,直到程序结束.A3.写法错误. 如果new一个数组,必须使用delete[]符号.A4.现代操作系统,程序结束后,会收回这个程序所占用的内存,也就是该程序占用的内存会全部得到释放.

这个是必须的啊.用new分配了一块内存,在使用完之后必须释放掉,否则就是内存泄露;指针也必须置空,不然这个指针就变成野指针了.以上两点都是隐患.有时候不释放也不会出问题,但new和delete一起使用这是标准C++的规则,我们学习应该按照标准来.所以析构函数应该是~LCS(){delete[]a;//new的是数组,释放的时候要加[]a=NULL;}

你释放了它的内存,就不可能再找到原来的地址了

对于您有没有delete,系统是不会去管的..只有在您的机子内存不够的时候才会出问题..您说的错是指什么错呢..是编译错呢还是运行错呢?..ps:new 不一定要delete,如果是在堆上用new分配空间的是要的,否则将会内存泄露;但是如果我们使用非堆上的空间则不要;这时new只是在已经存在的空间上执行一个构造函数,不管理空间分配,因而空间的管理权不为new对象所有,new对象只要在最后保证执行了析构函数就可以了也就是说,如果你不使用delete,那么编译不会报错,但会占用着内存.所以一般都是要new完就delete,防止内存泄漏.delete的作用也就在于此了. 其实用delete只是告诉系统这块地址空间可用,并非完全释放!

new/delete究竟做了些什么?在理解这个问题之前,我们先看一下下面的这段程序,有这么一个程序段:classa { public:a(){cout<<"aishere!"<<endl;} ~a(){cout<<"aisdead!"<<endl;} private:inti; }; a*pa=newa; deletepa; 在这个简单的程序段里

有new就要有delete如果你在类中new,析构函数不会去析构你new的东西,需要手动delete结构体一般只是作为数据存储

我燥!有机会学不好好学,就MD来这里请教?A肯定是对的,delete对无效地址不影响地处理了.本来动态必须手动释放的,可构造函数没有new,那么析构不用处理,处理了也不会错.其实B好象也对.自己做的,构造没new,析构没有delete,有错么?C++的析构期待编译器?还不对如果引用了外部new出来的,必须指定为NULL!否则一样的要么越界,要么内存不能释放!反正哥只选A地

对于计算机程序设计而言,变量和对象在内存中的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象.对于不能确定需要占用多少内存的情况,动态内存分配解决了这

网站首页 | 网站地图
All rights reserved Powered by www.lstd.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com