程序在内存使用方面有什么问题?多次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
指向另一个块后无法执行此操作。只有在任务或进程结束时,但在内存泄漏之前,它才是免费的。