我是C的新手。我目前正在学习内存泄漏,我正在尝试使用简单的C程序创建一个。我应该运行直到它崩溃,但是当我运行它时,使用的内存峰值在95%左右。我的代码不是内存泄漏吗?是否可以进行分页? 这是我正在尝试的代码:
int main(void) {
while (1)
{
char *newArea = malloc(10);
char *mainArea = malloc(10000);
mainArea = newArea;
}
}
答案 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
变量的所有先前值)都将丢失。