/*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并留下其他一切悬空?如果是这样,那么回收这段记忆的正确方法是什么?
答案 0 :(得分:2)
free
调用释放整个缓冲区;单个malloc
通话应与单个free
通话相对应。
至于它如何知道......好吧,这取决于实施。但如果你只是寻求安心,请考虑一下:
如果系统没有知道缓冲区有多大,那么它怎么知道它可以在哪里启动下一个动态分配(如果你应该再次调用malloc
而不需要free
d第一个缓冲区)?
这是内存管理库的全部责任。它适用于任何正确实施的系统。