从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
再次没有 free
d 第一个缓冲区)?
这是内存管理库的全部责任。它可以在任何正确实施的系统中工作。
/*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
再次没有 free
d 第一个缓冲区)?
这是内存管理库的全部责任。它可以在任何正确实施的系统中工作。