如CSystemInfo是DLL中的一个Singleton:
CSystemInfo& CSystemInfo::GetInstance( )
{
static CSystemInfo cSystemInfo;
return cSystemInfo;
}
那么在EXE结束后DLL才释放。造成了内存泄露。
Detected memory leaks!
Dumping objects ->
{328} normal block at 0x003CB350, 32 bytes long.
Data: <Intel Pentium 4 > 49 6E 74 65 6C 20 50 65 6E 74 69 75 6D 20 34 20
{327} normal block at 0x003CB420, 71 bytes long.
Data: <Microsoft Window> 4D 69 63 72 6F 73 6F 66 74 20 57 69 6E 64 6F 77
{251} normal block at 0x003C8888, 32 bytes long.
Data: < > C4 A7 C1 A6 B1 A6 B1 A6 CF C2 D4 D8 CF B5 CD B3
{250} normal block at 0x003C8828, 32 bytes long.
Data: < (C) > B0 E6 C8 A8 CB F9 D3 D0 20 28 43 29 20 CE DE CF
{249} normal block at 0x003C61C0, 32 bytes long.
Data: < > B1 B1 BE A9 CE DE CF DE BB A5 CD A8 BF C6 BC BC
Object dump complete.
怎么样解决这个问题??
CSystemInfo& CSystemInfo::GetInstance( )
{
static CSystemInfo cSystemInfo;
return cSystemInfo;
}
那么在EXE结束后DLL才释放。造成了内存泄露。
Detected memory leaks!
Dumping objects ->
{328} normal block at 0x003CB350, 32 bytes long.
Data: <Intel Pentium 4 > 49 6E 74 65 6C 20 50 65 6E 74 69 75 6D 20 34 20
{327} normal block at 0x003CB420, 71 bytes long.
Data: <Microsoft Window> 4D 69 63 72 6F 73 6F 66 74 20 57 69 6E 64 6F 77
{251} normal block at 0x003C8888, 32 bytes long.
Data: < > C4 A7 C1 A6 B1 A6 B1 A6 CF C2 D4 D8 CF B5 CD B3
{250} normal block at 0x003C8828, 32 bytes long.
Data: < (C) > B0 E6 C8 A8 CB F9 D3 D0 20 28 43 29 20 CE DE CF
{249} normal block at 0x003C61C0, 32 bytes long.
Data: < > B1 B1 BE A9 CE DE CF DE BB A5 CD A8 BF C6 BC BC
Object dump complete.
怎么样解决这个问题??
static CSystemInfo*_cSystemInfo; //注意是成员变量CSystemInfo* CSystemInfo::GetInstance( )
{
(_cSystemInfo== NULL) ? _cSystemInfo= new CSystemInfo() : NULL;
return _instance ;
}这样应该可以的
static CSystemInfo*_cSystemInfo; //注意是成员变量CSystemInfo* CSystemInfo::GetInstance( )
{
(_cSystemInfo== NULL) ? _cSystemInfo= new CSystemInfo() : NULL;
return _cSystemInfo;
}
2。没有用阿,你new了以后谁来delete呢?析构?
问题是析构将会在内存泄露报告之后才会执行。
new了吗?需要delete吗?
new了吗?需要delete吗?所以lz还是用个内存泄露检测工具看看吧,比如purify,它能帮你找到具体泄露的地方。