Bil*_*ias 1 c++ memory memory-leaks
我正在编写一个自定义文本文件 - 数据解析器(类似JSON),我已经失去了很多小时试图在其中找到微小的内存泄漏.
我正在使用VC++ 2008和命令_CrtMemCheckpoint和_CrtDumpMemoryLeaks来检查内存泄漏.
当我解析任何文件然后将其从内存中删除(与所声称的任何其他内存一起)时,我得到一个16字节的内存泄漏,如下所示:
{290} normal block at 0x00486AF0, 16 bytes long.
Data: < H `aH hH eH > C0 9A 48 00 60 61 48 00 18 68 48 00 D8 65 48 00
Run Code Online (Sandbox Code Playgroud)
我设法将"违规"代码行缩小到这个范围:
classDefinitions[FastStr(cString)] = classDef;
Run Code Online (Sandbox Code Playgroud)
classDefinitions是一个std::map<FastStr, FSLClassDefinition*>并且是我的解析器类的私有成员.
FastStr是一个简单的char*"包装器",允许使用简单的c字符串作为键值; 它没有内存泄漏(没有'新'命令).'FSLClassDefinition*'显然是一个简单的类指针,所以也没什么奇怪的.
现在抓住了:
这让我怀疑std :: map中存在内存泄漏; 但它也可能是我的错误...我很确定这是违规行,因为如果我在它之前停止解析,就没有内存泄漏; 还有就是内存泄漏,如果我只是停止解析后,这条线.
任何人都可以评论这个吗?
小智 10
泄漏报告中的"{290}"是泄漏的内存块的内存分配的序列号.如果此序列号始终相同,则可以使用_crtBreakAlloc在命中分配序列号时导致调试器中断.从堆栈跟踪中,您可以找到此块的分配位置.一旦你知道它被分配到哪里,为什么目的,它往往很容易确定为什么它没有被解除分配.
阅读Debug Heap文档以了解_crtBreakAlloc.
| 归档时间: |
|
| 查看次数: |
3892 次 |
| 最近记录: |