什么情况会引起内存泄漏?

时间:2022-01-03 20:57:38
如题,在VC中什么情况会引起内存泄漏?下列情况会引起内存泄漏吗?
1、比如在函数体内使用结构体?系统会自动回收吗?
2、在定义函数成员是定义的引用,用完后会自动回收吗?

17 个解决方案

#1


内存泄漏指在堆上分配内存后,没有释放。
1、怎样使用结构体的?堆还是栈?
2、不会

#2


就是在函数体内定义的结构体变量,会不会释放?

#3


1.使用结构体本身并不会产生内存泄漏``但如果你的结构体是new出来的,在程序结束后也没delete``那就泄了``嘿`
2.这个看不懂你的意思``不过定义引用应该不会出现内存泄漏``想象不到什么情况会泄``不过有可能是会造成内存访问错误倒是有可能``

内存泄漏就是说`你在堆里分配了(new)内存``没有释放(delete)``不过一般人很少犯这种错误``除极少数天才``像我这样``哈哈``多数情况是因为不了解某些类的实现机制啊``比如com里面的BSTR``你从某个函数拿到一个BSTR,你就需要释放``但是通常情况下是因为不知道要释放``所以泄了```

#4


在堆上申请的内存资源使用了没有释放就会内存泄漏了

#5


现在有个程序,内存使用在疯长,我想不到那里可以有泄漏的地方?

#6


是公司产品吗?程序大吗?方便的话发给我`帮你调`

#7


我的邮箱``crazyazreal@gmail.com

#8


谢谢您,但是公司有规定。

#9


new 完之后 一定要用delete

#10


new 了以后都delete 拉

#11


有可能异常造成

try
{
    classA pA = new classA;
    int b= 5/0; //在此异常 
    delete pA;
}
catch(...)
{
  //在这没有释放
}

#12


一般也就是分配不释放,
再来就是除0错了.
或者超出其定义的值?

#13


疯长,应该是你在循环new,最后只delete 一次造成的吧...
想让我们找原因,贴代码出来...

#14


把你new出来的东西 都看看有没有delete 

有些BSTR的 就算在函数体内定义的 也要记得释放

建议你还是分段 1个个调试吧

#15


new没有delete
malloc没有free
GlobalAlloc没有GlobalFree
……………………
总之,申请了内存没有释放都会造成内存泄漏;

对于GDI资源,Create...()的函数要对应Delete...()的函数。

#16


对一个void*类型的指针进行delete操作,有可能造成内存泄漏,它不执行析构函数

#17


用BoundChecker 查一下吧

#1


内存泄漏指在堆上分配内存后,没有释放。
1、怎样使用结构体的?堆还是栈?
2、不会

#2


就是在函数体内定义的结构体变量,会不会释放?

#3


1.使用结构体本身并不会产生内存泄漏``但如果你的结构体是new出来的,在程序结束后也没delete``那就泄了``嘿`
2.这个看不懂你的意思``不过定义引用应该不会出现内存泄漏``想象不到什么情况会泄``不过有可能是会造成内存访问错误倒是有可能``

内存泄漏就是说`你在堆里分配了(new)内存``没有释放(delete)``不过一般人很少犯这种错误``除极少数天才``像我这样``哈哈``多数情况是因为不了解某些类的实现机制啊``比如com里面的BSTR``你从某个函数拿到一个BSTR,你就需要释放``但是通常情况下是因为不知道要释放``所以泄了```

#4


在堆上申请的内存资源使用了没有释放就会内存泄漏了

#5


现在有个程序,内存使用在疯长,我想不到那里可以有泄漏的地方?

#6


是公司产品吗?程序大吗?方便的话发给我`帮你调`

#7


我的邮箱``crazyazreal@gmail.com

#8


谢谢您,但是公司有规定。

#9


new 完之后 一定要用delete

#10


new 了以后都delete 拉

#11


有可能异常造成

try
{
    classA pA = new classA;
    int b= 5/0; //在此异常 
    delete pA;
}
catch(...)
{
  //在这没有释放
}

#12


一般也就是分配不释放,
再来就是除0错了.
或者超出其定义的值?

#13


疯长,应该是你在循环new,最后只delete 一次造成的吧...
想让我们找原因,贴代码出来...

#14


把你new出来的东西 都看看有没有delete 

有些BSTR的 就算在函数体内定义的 也要记得释放

建议你还是分段 1个个调试吧

#15


new没有delete
malloc没有free
GlobalAlloc没有GlobalFree
……………………
总之,申请了内存没有释放都会造成内存泄漏;

对于GDI资源,Create...()的函数要对应Delete...()的函数。

#16


对一个void*类型的指针进行delete操作,有可能造成内存泄漏,它不执行析构函数

#17


用BoundChecker 查一下吧