Tam*_*Lam 3 c memory malloc free dynamic-memory-allocation
关于内存使用情况,程序有什么问题?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%d\n”, *ptr);
free(ptr);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
Sou*_*osh 18
在你的代码中
ptr = malloc(sizeof(int));
*ptr = 111;
ptr = malloc(sizeof(int));
Run Code Online (Sandbox Code Playgroud)
对第二个的调用malloc()将返回值存储到同一个变量中.这样,您将覆盖先前返回的指针.因此,第二个malloc()(将返回的指针存储在同一个变量中)会导致内存泄漏.
你丢失了之前返回的实际指针,malloc()并且没有办法free().所以,你是对的,旧的记忆被浪费了,(注意:不是free()-d).
FWIW,每次调用malloc()(提供成功)都会为您提供一个新的存储区域.它不会像这样创建内存,但会返回一个指针,其中包含可以使用的内存大小,以及之后的free()-d.
要添加到这个,一个(ny)适度的内存检查工具将尖叫为上述代码.这是广泛使用的一个,valgrind/memcheck