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

相关文章

首先GDB是类unix系统下一个优秀的调试工具, 当然作为debug代...
1. C语言定义1个数组的时候, 必须同时指定它的长度.例如:int...
C++的auto关键字在C+⬑新标准出来之前基本...
const关键字是用于定义一个不该被改变的对象,它的作用是告诉...
文章浏览阅读315次。之前用C语言编过链表,这几天突然想用C+...
文章浏览阅读219次。碰到问题就要记录下来,防止遗忘吧。文章...