今天在调试代码中发现一个问题,就是基于对话框的一个demo,在录制完一段码流,并且将详细信息显示在edit中,当结束录制的时候,直接点击退出(onok),然后就会报告内存泄漏:
Detected memory leaks!
Dumping objects ->
strcore.cpp(118) : {124} normal block at 0x004327E0, 38 bytes long.
Data: < 1 > 02 00 00 00 19 00 00 00 19 00 00 00 B5 DA 31 B8
strcore.cpp(118) : {122} normal block at 0x00432890, 52 bytes long.
Data: < ' > 01 00 00 00 08 00 00 00 27 00 00 00 C8 CE CE F1
Object dump complete.
初始以为是CString的问题,但经过检查在代码中凡是调用str.GetBuffer(0)的地方,都调用了相应的str.RealeaseBuffer()。在代码的多个线程中也没有调用new char[],排除CString的问题。怀疑是多个线程在
退出的时候,有的变量没有释放,但是每个线程中对应的new都有delete。
关键的关键是这个内存错误在调试状态下,总是一闪而逝,让我想不明白,我在认为可能出现bug的地方都
加了断点,没辙了,想到了最老土的方法,用print screen来捕捉这个错误,还好天无绝人之路ÿ