English 中文(简体)
C++: 滞后:主机(主机)的存储漏损
原标题:C++: std:set memory leaks in main()

在微软视像C++(VS 2008/2010)中,使用一些标准模版图书馆集装箱,如:set或 st: 您的矢量将随此而发生:

#include <set>
#include <stdlib.h>
#include <crtdbg.h>
#define _CRTDBG_MAP_ALLOC

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    printf("I m leaking
");

    std::set<int> s;

    _CrtDumpMemoryLeaks();
    return 0;
}

在你管理该方案之后,你取得了一些成果:

Detected memory leaks!
Dumping objects ->
{209} normal block at 0x005E9C68, 20 bytes long.
 Data: <h ^ h ^ h ^     > 68 9C 5E 00 68 9C 5E 00 68 9C 5E 00 CD CD CD CD 
{208} normal block at 0x005E9C20, 8 bytes long.
 Data: <  ;     > F8 FE 3B 00 00 00 00 00 
Object dump complete.

这里的解决办法是: 仅附上此定义:

int _tmain(int argc, _TCHAR* argv[])
{
    printf("I m not leaking any more
");

    {
        std::set<int> s;
    }
    _CrtDumpMemoryLeaks();
    return 0;
}

这是一种奇怪的行为,我很想知道,这是否是微软公司或一些STL-Problem公司的一个Bug? 我猜测这起事件。 如果可能有人在A/63/1-System上试图这样做,那将令人感兴趣。

最佳回答

第一种例子是泄漏吗? <代码><>s 仍属适用范围,因此当然,它仍然有与其有关的记忆。 d) 须在<条码>_tmain后打电话,才能获得有效的答案。

在你的第二个例子中,<代码>s已不在范围,并已销毁,因此毫不奇怪的是,它不再记忆与它有关。

你们只需要把泄漏检查点放在你的法典中具有意义的地方。

问题回答

暂无回答




相关问题
Insert into an STL queue using std::copy

I d like to use std::copy to insert elements into a queue like this: vector<int> v; v.push_back( 1 ); v.push_back( 2 ); queue<int> q; copy( v.begin(), v.end(), insert_iterator< queue&...

C++ STL unordered_map problems and doubts

after some years in Java and C# now I m back to C++. Of course my programming style is influenced by those languages and I tend to feel the need of a special component that I used massively: the HASH ...

Why is type_info declared outside namespace std?

I m using VS2005 and the MS implementation of STL. However, the class type_info in is declared outside of "namespace std". This creates some problems for third party libs that excepts to find a std::...

热门标签