请问这样写会不会造成内存泄露??????
class A;
void function(A *h)
{
// do nothing here
}
main()
{
for(int i=0;i<10000000000000;i++)
{
function(new A());
}
}
问题点数:20、回复次数:33Top
1 楼sswweett()回复于 2006-08-23 14:03:31 得分 0
应该会的Top
2 楼HappyTree(笨笨·天行健)回复于 2006-08-23 14:05:22 得分 0
会的
虽然A中什么都没有,但在vs下类的最小大小为1,也就是说,每new一次都会造成一个字节的内存泄漏。Top
3 楼billconan(billconan)回复于 2006-08-23 14:07:48 得分 0
A 不是什么都没有 我是懒得写 声明一下,说明有个类ATop
4 楼sswweett()回复于 2006-08-23 14:11:17 得分 0
应该在function a中deleteTop
5 楼rubbish_only(原谅我的丑)回复于 2006-08-23 14:22:02 得分 0
肯定会,因为你new 的对象没有delete,如果你的对象足够大,系统可能在程序结束前就异常推出了。new操作符是在堆中申请对象,需要程序员自身去释放。Top
6 楼hziee_()回复于 2006-08-23 14:33:01 得分 0
当然会。记住不管在哪调用new,都是在堆上分配了内存。Top
7 楼Fshx(C++初探)回复于 2006-08-23 14:48:40 得分 0
内存泄露Top
8 楼OpenHero(开勇)回复于 2006-08-23 14:52:50 得分 0
A的大小为1Top
9 楼robin_yao()回复于 2006-08-23 15:03:17 得分 0
这当然会了。
你NEW了,没DELETE啊!Top
10 楼taosiming(浪苍云)回复于 2006-08-23 15:13:36 得分 0
jf!
肯定会阿Top
11 楼zsp006()回复于 2006-08-23 15:20:51 得分 0
new和delete必须成对写。Top
12 楼guo0084(alre)回复于 2006-08-23 16:25:48 得分 0
会的Top
13 楼neustrong(小强)回复于 2006-08-23 16:50:43 得分 0
必须的!Top
14 楼OOPhaisky(异化$渴望成功~~)回复于 2006-08-23 16:54:39 得分 0
这样100%内存泄露。
void function(A *h)
{
// do nothing here
}
在函数结尾处,h指针本身的空间(一个指针4bytes)会被释放,但是指针指向的空间不会被释放,所以内存泄露在所难免。Top
15 楼afgkidy(到处转悠找MONEY)回复于 2006-08-23 16:59:58 得分 0
运行下,要是你能运行正常我跟你姓了。Top
16 楼leonhome(腐烂生存)回复于 2006-08-23 17:11:01 得分 0
必然会~~~Top
17 楼youhaodeyi(友好的翼)回复于 2006-08-23 17:17:08 得分 0
会泄漏内存的,在function中进行delete h;操作Top
18 楼xl5338870(xlix)回复于 2006-08-23 17:45:26 得分 0
内存泄露!
你把类A占空间弄大一点,运行下面的程序,很快就死。
class A {
char cc[100000];
};
void f(A* p) { }
int main() {
for (int i = 0; i < 100000000; ++i, f(new A()));
return 0;
}Top
19 楼wuyazhe(wyz&xyl)回复于 2006-08-23 18:50:20 得分 0
非常明显的泄漏。所以,可以自己写个宏来模拟成vs.net的using
#define USING(cls,obj) cls* obj = new cls();
#define ENDUSING(obj) if(obj != NULL) delete obj; obj = NULL;
调用例如:
USING(CString,str)
{
str->Format("%d",10160919);
MessageBox(str->GetBuffer(str->GetLength()));
}
ENDUSING(str)Top
20 楼BenjaminHuang(肥牛阿Ben)回复于 2006-08-23 18:57:56 得分 0
泄Top
21 楼Wolf0403(废人:独活十年~心如刀割)回复于 2006-08-24 03:18:44 得分 0
>> 肯定会,因为你new 的对象没有delete,如果你的对象足够大,系统可能在程序结束前就异常推出了。
已经不是 DOS 的时代了。。Top
22 楼playmud((猪头流氓)(抵制日货)(热烈庆祝火箭输球))回复于 2006-08-24 08:50:01 得分 0
问题比较深奥,翻翻书去。Top
23 楼fatweier(青)回复于 2006-08-24 08:54:47 得分 0
new并不一定是用在堆上分配内存Top
24 楼besthyq(寻欢醉一场,但愿长醉不愿醒!)回复于 2006-08-24 09:09:04 得分 0
楼上的,那NEW还可以在哪儿分配?Top
25 楼freefishmj()回复于 2006-08-24 09:19:17 得分 0
真是不懂,LZ为什么弄了一个那么大的for循环Top
26 楼recray()回复于 2006-08-24 10:32:51 得分 0
当然会,这样改一下,应该就不会了
class A;
void function(A *h)
{
// do nothing here;
delete h;
}
main()
{
for(int i=0;i<10000000000000;i++)
{
function(new A());
}
}
Top
27 楼guo0084(alre)回复于 2006-08-24 10:38:12 得分 0
应该避免这种写法,如果这样调用就不对了。
function(new a[2]);Top
28 楼ttfy1234(我自将心对明月,奈何明月照沟渠!)回复于 2006-08-24 10:55:21 得分 0
有个疑问:不是说程序结束的时候系统(>98)能自动回收资源的吗Top
29 楼zxf501a(峰)回复于 2006-08-24 11:36:49 得分 0
自动是自动啊,但是有的是过一段时间,有的是发现空间不够用就去检查然后回收
楼主此类程序据说运行后系统变慢到一定程度后还是能维持运行
不过为了系统和程序着想,自己申请了空间应该要负责释放吧,有借有换,再借不难Top
30 楼Dir_J(小菜菜)回复于 2006-08-24 13:11:55 得分 0
早泄了Top
31 楼OnlyHappy(说好不打脸)回复于 2006-08-24 13:13:51 得分 0
一泻千里Top
32 楼iihero(iihero)回复于 2006-08-24 14:08:56 得分 0
of course.Top
33 楼wei_feihong()回复于 2006-08-27 22:37:06 得分 0
momery leakTop




