MFC 里面的 delete 问题
我在一个Vc6.0环境下编写程序,有一个函数(我自己写得,是那种画图函数)需要开辟一些二维数组是double型的,因此我用了double**x;x=newdouble*[...
我在一个Vc6.0环境下编写程序,有一个函数(我自己写得,是那种画图函数)需要开辟一些二维数组是double型的,因此我用了 double **x;x=new double*[4];for(int i=0;i<=4;i++){x[i]=new double[4] } 来动态分配的(这样的数组有很多),结果问题是我在用WIN api 做这个画图程序的时候很正常,关闭该程序也正常; 但是在MFC里面的myview 类调用这样的函数的时候也能画图,可是就是在关闭的瞬间,CPU使用到达百分之百然后持续个几秒钟后才降下来;我打开认为管理器发现在我点击关闭的时候那个程序依然存在(cpu到顶);我就纳闷了 为什么都是一样的函数,在两个不同方法开发程序中就这么差别大呢? 我到网上去查,有人说可能是动态分配的数组内存没有释放;因此我就去用DELETE在我所编写的程序要结束的时候去(此时那些数组就根本没再被访问了) 释放,并且网上说DELETE 的释放方法不一 我每一个都试验了,可是每当我点击画图命令调用画图函数画图的时候 就由一个DEBUG错误,说我程序出错,错误就在DELETE那里 我都查遍了也试变了 可是问题依旧;请哪位大哥大姐懂行的 指点一下 !小弟只有70分全部送上
现在问题已经解决了 我说的是我删除二维数组的方法已经找到了 而且当我关闭程序的时候 Cpu还是瞬间到达百分百,不过时间短多了只有1秒不到;也就是说我释放内存是对的!!!可以解决问题 不过问题还没有完全解决 是因为 我在其他的地方定义了一些 一维的数组 如 double *x,x=new double[100];之类的 我怀疑这些地方也需要释放!!该如何释放!!!!!高手进来!!!!!!!!前面的两个答案作废 展开
现在问题已经解决了 我说的是我删除二维数组的方法已经找到了 而且当我关闭程序的时候 Cpu还是瞬间到达百分百,不过时间短多了只有1秒不到;也就是说我释放内存是对的!!!可以解决问题 不过问题还没有完全解决 是因为 我在其他的地方定义了一些 一维的数组 如 double *x,x=new double[100];之类的 我怀疑这些地方也需要释放!!该如何释放!!!!!高手进来!!!!!!!!前面的两个答案作废 展开
4个回答
展开全部
针对这个回答下:
double **x;x=new double*[4];for(int i=0;i<=4;i++){x[i]=new double[4]。
先delete x[i];//单个元素释放delete
然后delete[] x;//数组释放用delete[]
补充回答:
double *x,x=new double[100];
delete[] x;
使用delete前不用检查指针是否为NULL。删除空指针不会引发错误。
用new之类时,使用NULL对指针进行初始化。目的是,如果不小心在还未用new对该指针进行分配就使用的话,程序会出错,这样就可以轻松地知道错误在哪里。加了NULL,迫使指针指向地址为0x00000000,无论读写该地址都会出错,而不做初始化,指针里的值可能会是个垃圾值,对于这个垃圾值,程序不一定会报错!
delete后,最好也给指针加NULL:delete x;x=NULL;(删除后再使用也会报错,同样可以帮助确定出错位置)
double **x;x=new double*[4];for(int i=0;i<=4;i++){x[i]=new double[4]。
先delete x[i];//单个元素释放delete
然后delete[] x;//数组释放用delete[]
补充回答:
double *x,x=new double[100];
delete[] x;
使用delete前不用检查指针是否为NULL。删除空指针不会引发错误。
用new之类时,使用NULL对指针进行初始化。目的是,如果不小心在还未用new对该指针进行分配就使用的话,程序会出错,这样就可以轻松地知道错误在哪里。加了NULL,迫使指针指向地址为0x00000000,无论读写该地址都会出错,而不做初始化,指针里的值可能会是个垃圾值,对于这个垃圾值,程序不一定会报错!
delete后,最好也给指针加NULL:delete x;x=NULL;(删除后再使用也会报错,同样可以帮助确定出错位置)
展开全部
delete [] 试试.
如果是删除数组,必须用 delete[],否则不会释放整个数组所占用的空间。
如果是删除数组,必须用 delete[],否则不会释放整个数组所占用的空间。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
delete前先检查一下变量是否==NULL,不等再delete
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
new delete
malloc free
都要成对使用,不要造成内存泄露!建议重新检查代码
malloc free
都要成对使用,不要造成内存泄露!建议重新检查代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询