微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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字节……

原文地址:https://www.jb51.cc/c/117487.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐