当我们执行多个malloc来为单个目标指针分配内存时会发生什么?

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