【发布时间】:2018-08-28 11:11:20
【问题描述】:
如果我使用 Poco::XML::Document 类,Visual Studio 会在应用程序运行后转储内存泄漏。
我从 Visual Studio 2017 项目模板创建了一个简单的 ConsoleApplication,并将以下代码添加到 Main
#include "pch.h"
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include <iostream>
#include <Poco/DOM/Document.h>
#include <Poco/DOM/AutoPtr.h>
int main()
{
Poco::AutoPtr<Poco::XML::Document> pDoc = new Poco::XML::Document;
std::cout << "Hello World!\n";
_CrtDumpMemoryLeaks();
return 0;
}
这是 Visual Studio 中的泄漏转储(我省略了一些部分,因为它真的很大):
{1976} normal block at 0x0130C048, 8 bytes long.
Data: <, / > 2C 18 2F 01 00 00 00 00
{1975} normal block at 0x0130C0F0, 8 bytes long.
Data: < / > 10 18 2F 01 00 00 00 00
{1974} normal block at 0x0130BD70, 8 bytes long.
Data: < / > F4 17 2F 01 00 00 00 00
{1973} normal block at 0x0130BE88, 8 bytes long.
Data: < / > D4 17 2F 01 00 00 00 00
....
{174} normal block at 0x012D87E0, 8 bytes long.
Data: < > C4 0B 89 0F 00 00 00 00
{173} normal block at 0x012DB928, 32 bytes long.
Data: <%Y-%m-%dT%H:%M:%> 25 59 2D 25 6D 2D 25 64 54 25 48 3A 25 4D 3A 25
{172} normal block at 0x012D87A8, 8 bytes long.
Data: <d > 64 0E 89 0F 00 00 00 00
{171} normal block at 0x012D8AF0, 8 bytes long.
Data: <L > 4C 0B 89 0F 00 00 00 00
Object dump complete.
我使用 Poco 作为 DLL。 Poco 的版本是 1.9.0 我还使用 Dr. Memory 来检测内存泄漏。这是泄漏运行的摘要:
ERRORS FOUND:
12 unique, 12 total unaddressable access(es)
0 unique, 0 total uninitialized access(es)
146 unique, 201 total invalid heap argument(s)
0 unique, 0 total GDI usage error(s)
0 unique, 0 total handle leak(s)
0 unique, 0 total warning(s)
0 unique, 0 total, 0 byte(s) of leak(s)
0 unique, 0 total, 0 byte(s) of possible leak(s)
【问题讨论】:
标签: c++ visual-studio memory-leaks poco-libraries