我正在尝试理解C语言中的函数malloc
和free
。我知道这个问题在StackOverflow上被广泛讨论过。但是,我现在有点了解这些函数的作用了。我想知道为什么要使用它们。让我们看一下这段代码:
int n = 10;
char* array;
array = (char*) malloc(n * sizeof(char));
// Check whether memory could be allocated or not...
// Do whatever with array...
free(array);
array = NULL;
我创建了一个char类型的指针,称之为
array
。然后我使用malloc
来找到一块当前未被使用且大小为(10 * sizeof(char))
字节的内存块。在将该地址分配给先前创建的char指针之前,我将其转换为char指针类型。现在我可以使用我的char数组了。完成后,我将使用free
释放那块不再使用的内存块。我有一个问题:为什么我不只是做
char array[10];
?维基百科只有一句简短的话来回答这个问题,而那句话我不幸地不理解:“但是,数组的大小在编译时固定。如果希望动态分配类似的数组...”
我的大学讲义也同样简洁:
“还可以从堆中分配内存。”
堆是什么?我知道一个名为堆的数据结构。 :)
然而,如果有人能够解释一下在什么情况下使用
malloc
和free
而不是常规变量声明是有意义的,那就太好了。 :)