lstd.net
当前位置:首页 >> 关于C++ 指针nEw和DElEtE的问题。 >>

关于C++ 指针nEw和DElEtE的问题。

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

c++中,new的用法很灵活,这里进行了简单的总结:new() 分配这种类型的一个大小的内存空间,并以括号中的值来初始化这个变量;new[] 分配这种类型的n个大小的内存空间,并用默认构造函数来初始化这些变量; 当使用new运算符定义一个多维数组变量或数组对象时,它产生一个指向数组第一个元素的指针,返回的类型保持了除最左边维数外的所有维数.delete用于释放申请的内存空间释放由new申请的空间可以使用delete,释放由new[]申请的空间可以使用delete[]

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

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

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

这个是必须的啊.用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如果你在类中new,析构函数不会去析构你new的东西,需要手动delete结构体一般只是作为数据存储

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

char* p=new char;你这里申请了一个字节的空间,实际上编译器分给程序的空间不至一个字节,在分配的地址的前后都有几个字节值为的0XFE,这部分就是传说中的保护区,而你 for(int i=1;i<3;i++) { p[i]='c'; }这样就强制将其保护区破坏了,delete的时候找不到用来标识结束的位置,当然就出错了哦

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