如何跟踪泄漏的内存量?

时间:2011-10-18 23:27:51

标签: c memory memory-leaks

我正在完成一项家庭作业,要求我编写一个泄漏内存的程序,跟踪它崩溃后会泄漏多少内存。

我对程序的一般想法是不断重新分配malloc指针。

到目前为止,这是我的代码:

char *oldMemory = malloc(125000); //1MB of memory.
char *newMemory = malloc(125000);
oldMemory = newMemory;
  • 是否有办法把它放在循环中并反复孤立a 一定量的内存,直到程序无法再分配任何内存并崩溃?
  • 如何在程序崩溃之前跟踪泄漏的内存量?

感谢您的时间和专业知识!

2 个答案:

答案 0 :(得分:4)

  1. 计算泄漏分配的大小。
  2. 不要忘记打印每次迭代时泄露的大小 - 即使程序崩溃,您也会看到结果。如果在访问之前测试失败的分配,程序不应该崩溃。

    因此:

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    enum { ALLOCSIZE = 125000 };
    
    int main(void)
    {
        long long size = 0;
        char *space = malloc(ALLOCSIZE);
        while (space != 0)
        {
            size += ALLOCSIZE;
            printf("OK %lld\n", size);
            memset(space, '\0', ALLOCSIZE);
        }
        return(0);
    }
    

    Linux OOM可能会混淆事物;它允许过度承诺记忆。您必须在泄漏之前访问已分配的内存 - 因此memset()(或者您可以使用calloc()代替malloc())。

答案 1 :(得分:0)

当你在C中分配一些内存块时,你应该负责使用它来释放它 free()功能。
如果你想确保你的程序不会因为一些内存泄漏而崩溃 在要求更多内存或使用分配的内存时,可以使用assert()功能 你应该检查从malloc返回的返回指针,如果它是NULL,那么分配失败。 &GT;&GT;在linux内核中要小心malloc()由于“内存过量使用”而无法返回NULL