从C中的动态数组中回收内存

Reclaiming memory from dynamic array in C

/*Pointer Array (Dynamic) EXAMPLE*/

int size = 0;
printf("Enter the size of the array you want:\n");
scanf("%d",&size);

int * Dptr = malloc(sizeof(*Dptr)*size);
if(!Dptr)
    return -1;

for(int i=0;i<size;i++)
    Dptr[i]= -7;

printf("Congratulations, you successfully allocated and wrote to a dynamic array.\n");

free(Dptr); //how does it "know" what to deallocate? Is everything getting proprely reclaimed?

上面我用C写的一个小涂鸦,我有一个关于动态数组内存分配的问题。最后我调用了 free 函数来释放我分配的数组的内存,但我的问题是,如何 "know" 释放多少内存?或者,它是否只是取消分配第一个 int 而让其他一切悬空?如果是这样,回收此内存的正确方法是什么?

free调用释放了整个缓冲区;单个 malloc 调用应对应单个 free 调用。

至于它是如何知道的……好吧,这将取决于实现。但是,如果您只是想安心,请考虑一下:

如果系统没有知道缓冲区有多大,它怎么知道可以从哪里开始下一次动态分配(如果你应该调用malloc再次没有 freed 第一个缓冲区)?

这是内存管理库的全部责任。它可以在任何正确实施的系统中工作。