从C

时间:2017-01-19 18:40:25

标签: c memory-management dynamic-arrays

/*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函数来释放我分配的数组的内存,但我的问题是,它如何“知道”要释放多少内存?或者,它只是取消分配第一个int并留下其他一切悬空?如果是这样,那么回收这段记忆的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

free调用释放整个缓冲区;单个malloc通话应与单个free通话相对应。

至于它如何知道......好吧,这取决于实施。但如果你只是寻求安心,请考虑一下:

如果系统没有知道缓冲区有多大,那么它怎么知道它可以在哪里启动下一个动态分配(如果你应该再次调用malloc而不需要free d第一个缓冲区)?

这是内存管理库的全部责任。它适用于任何正确实施的系统。