c语言 - 当我们执行多个 malloc 将内存分配给单个目标指针时会发生什么?



程序在内存使用方面有什么问题?多次malloc同一指针时会发生什么情况?它是否每次都在堆中创建新内存,指针将指向新内存,然后旧内存将被浪费?

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *ptr;
ptr = malloc(sizeof(int));
*ptr = 111;
ptr = malloc(sizeof(int));
*ptr =-234;
printf(“n%dn”, *ptr);
free(ptr);
return EXIT_SUCCESS;
}

在你的代码中

ptr = malloc(sizeof(int));
*ptr = 111;
ptr = malloc(sizeof(int));

对第二个malloc()的调用将返回值存储到同一变量中。这样,您将覆盖以前返回的指针。因此,第二个malloc()(将返回的指针存储在同一变量中)会导致内存泄漏。

您将丢失之前由malloc()返回的实际指针,并且无法free()。所以,你是对的,旧的内存被浪费了,(注意:不是free()-d)。

FWIW,每次调用malloc()(提供成功)都会给你一个新的内存区域。它不会创建这样的内存,但它返回一个指针,其中包含请求的内存大小,可以使用该指针并在以后free()-d。

除此之外,一个(ny)适度的内存检查器工具将为上述代码尖叫。这是广泛使用的一个,valgrind/memcheck。

程序在内存使用方面有什么问题?

您正在使用或分配使用 malloc 的不必要的内存。你可以使用单个malloc。

当您错误地放置同一指针的时间倍数时会发生什么?

每次将 malloc 分配的某个内存块的指针存储在同一个指针ptr中时,ptr将指向最新的。

它是否每次都会在堆中创造新的记忆

是的,每次调用 malloc 时,都会分配一个新的内存块。

指针将指向

新内存,旧内存将指向 然后被浪费了?

在显式释放内存块之前,内存块仍将保留在任务或进程下,在这种情况下,将ptr指向另一个块后无法执行此操作。只有在任务或进程结束时,但在内存泄漏之前,它才是免费的。

最新更新