c – 为什么这段代码不会导致内存泄漏?

前端之家收集整理的这篇文章主要介绍了c – 为什么这段代码不会导致内存泄漏?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在我的应用程序中模拟内存泄漏.我写下面的代码,并试图在perfmon中看到.
int main()
{
    int *i;
    while(1)
    {

        i = (int *) malloc(1000);

        //just to avoid lazy allocation
        *i = 100;

        if(i == NULL)
        {
            printf("Memory Not Allocated\n");
        }

        Sleep(1000);
    }
}

当我在任务管理器中看到使用过的内存时,它在52K和136K之间波动,但不会超过它.手段,有些东西它显示52K,有时136K,我不明白这个代码一旦达到136K,回到52K,并没有超越那个.

我尝试使用perfmon,但不能准确地在perfmon中看到什么,计数器的快照,

请建议如何模拟内存泄漏以及如何检测它.

解决方法

严格地说,内存泄漏是依赖于上下文的:程序中的某些内容会随着时间的推移不断分配内存,而不应释放它,而它应该被释放.

您的代码会在每次后续遍历while循环时产生“泄漏”,因为您的程序在该点失去了先前分配的指针的知识.这仅在检查中可见,但在这种情况下;从发布的代码来看,它看起来更像是你实际上在做的事情,尽管很慢,正试图创造一种记忆压力的情况.

要在没有检查的情况下“找到”泄漏,您需要运行像valgrind(Unix / Linux / OSX)这样的工具,或者在Visual Studio中使用DEBUG_NEW宏启用allocation tracing并使用调试器查看输出.

如果你真的想急着强调内存,一次分配1024 x 1024 x 1024字节……

猜你在找的C&C++相关文章