怎样找到这些内存到底是从哪儿逃掉的
我的调试版程序运行结束后,输出了310条内存泄漏的信息,只有{92}说有256字节,其他都是64字节。详情如下:
{92} normal block at 0x00F46818, 256 bytes long.
Data: <p2 R R xS > 70 32 F4 00 18 52 F4 00 C8 52 F4 00 78 53 F4 00
{56} normal block at 0x00F431F0, 64 bytes long.
Data: < O xx > C8 4F F4 00 78 78 F4 00 CD CD CD CD CD CD CD CD
{54} normal block at 0x00F43170, 64 bytes long.
Data: < > 00 00 00 00 01 00 00 00 CD CD CD CD CD CD CD CD
{53} normal block at 0x00F430F0, 64 bytes long.
Data: < . > 90 2E F4 00 CD CD CD CD CD CD CD CD CD CD CD CD
{51} normal block at 0x00F44F48, 64 bytes long.
Data: < > 00 00 00 00 CD CD CD CD CD CD CD CD CD CD CD CD
{50} normal block at 0x00F44EC8, 64 bytes long.
Data: < [ h%[ 0+[ > 80 20 5B 00 68 25 5B 00 30 2B 5B 00 CD CD CD CD
Object dump complete.
D3DX: MEMORY LEAKS DETECTED: 12 allocations unfreed (131440 bytes)
最下面一行是什么意思,我不懂;我没有用malloa分配过内存。new分配的我都删除了。
最后一行的提示我记不清以前出现过没有。但这一句前面的信息最初都没有的,当我无意中发现那最后一行的提示后,我就在整个解决方案里搜索,当看到某个文件中有new语句,却没有delete,我也没细看,就增加了一句delete,结果出现写入冲突,我就去掉了自己写的一句,再调试就出现了上面的一大堆泄漏信息,怎么也找不到问题在哪儿。
请过往大侠们指点一下,怎样找到这些内存到底是从哪儿逃掉的,提供个思路也行。
我太菜了,那些提示我看不懂,在此拜谢大家了!
[解决办法]
你delete掉后,是不是还有地方调用到了?
[解决办法]
new的底层也是调用的malloc。
底下是说检测到12处分配的内存没有释放。应该是在D3DX这个模块里。
0x00F44EC8这些是分配的内存地址。没看明白你这是用什么检测的,按说应该还会显示是在哪里分配的内存,否则太难找了。
[解决办法]
搜索:检测内存泄露工具…
[解决办法]
你用到 STL了?查查第三方库
[解决办法]
提示的是内存没有释放造成溢出。
“后来我发现有些泄漏的东西根本就不是我做的,只不过我调用的时候似乎不恰当,才出现了问题。”
谁申请,谁释放。
如果不是多线程调用,可以考虑把模块的一些类做成单例模式,统一在析构里面delete,这样会比较清晰。