我是否泄漏内存?

问题描述 投票:0回答:1

好,这是基本事实,当我启动程序时,我会看到“任务管理器”总是一样的。

Memory(active private working set)  Memory(private working set)
           1,412K                            1,412k

第一次启动时大约1M不错,这是一个稳定的数字。现在,我需要检查内存泄漏,以便执行以下操作。

        _CrtMemState checkPt1, checkPt2, checkPt3;
        _CrtCheckMemory();
        _CrtMemCheckpoint(&checkPt1);
        ClientSocket = INVALID_SOCKET;
        ClientSocket =  CurrentClass->AcceptIPV4();
        if (ClientSocket != INVALID_SOCKET) {
            thread (SubThread, CurrentClass, ClientSocket).join();
        }
        _CrtCheckMemory();
        _CrtMemCheckpoint(&checkPt2);
        _CrtMemDifference(&checkPt3, &checkPt1, &checkPt2);
        _CrtMemDumpStatistics(&checkPt3);
        _CrtMemDumpAllObjectsSince(&checkPt1);

现在,此工作正常,它根本不会占用我的线程。线程执行并获得报告,如下所示。

The thread 0x4470 has exited with code 0 (0x0).
8924 bytes in 22 Free Blocks.
0 bytes in 0 Normal Blocks.
0 bytes in 0 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 0 bytes.
Total allocations: 8924 bytes.
Dumping objects ->
Object dump complete.

这是好消息,我似乎分配的每个字节都被释放了。现在麻烦了,当我查看“任务管理器”时,看到以下内容。

  Memory(active private working set) Memory(private working set)
            1,652K                          1,652k 

仅运行一个线程后,这增加了全部225k。事实表明,每次执行此线程时,“任务管理器”都会增加大约225k。所以我是否泄漏内存。我在线程的每一行代码中都有它,在我使用malloc的任何地方都有一个空闲,在我使用new的任何地方都有一个带有删除的删除。有人可以指出我正确的方向吗?

c++ memory crt
1个回答
0
投票

如果在Linux上,我建议使用Valgrind;在Windows上,我建议使用Dr. Memory。 VS具有某种内存监视器,但我没有对其进行过多研究。 Memory博士为我工作得还不错,因为它类似于Valgrind。

© www.soinside.com 2019 - 2024. All rights reserved.