故意崩溃C应用程序与内存泄漏

时间:2016-05-13 06:45:28

标签: c memory-leaks

我是C的新手。我目前正在学习内存泄漏,我正在尝试使用简单的C程序创建一个。我应该运行直到它崩溃,但是当我运行它时,使用的内存峰值在95%左右。我的代码不是内存泄漏吗?是否可以进行分页? 这是我正在尝试的代码:

int main(void) {
    while (1)
    {
        char *newArea = malloc(10);
        char *mainArea = malloc(10000);
        mainArea = newArea;
    }
}

2 个答案:

答案 0 :(得分:4)

为了使程序更快,耗费更少的内存,许多操作系统在实际使用它之前不会分配任何动态内存。您的代码从不使用动态内存,因此操作系统可能不会分配任何内容,只是保留了内存。

因此,如果您只是尝试在已分配的内存中写入某个位置,则应该按预期耗尽内存,因为您将强制操作系统执行实际分配。

答案 1 :(得分:-1)

你所做的只是耗尽可用内存,你可以做得更简单 - 只需分配内存并忘掉它:

int main(void)
{
    while (1)
    {
        (void) malloc(10000);
    }
    return 0;  // will never get here!
}

然而,内存泄漏是另一回事 - 它为某些任务分配内存而不是在之后处理它。例如:

int main(void)
{
    while (StillSomethingToDo())
    {
        char *membuffer = malloc(10000);

        DoSomethingWithTheBuffer(membuffer);

        // forget to free(membuffer)
    }
    return 0; // will return normally
}

StillSomethingToDo()返回'false'时循环终止后,main()继续进行return,但是堆上有一些块(可能有很多块)不是free {1}} - d。并且它们不能再被释放,因为指向它们的指针(membuffer变量的所有先前值)都将丢失。