参见英文答案 >
What’s the difference between a VLA and dynamic memory allocation via malloc? 4个
在下面的代码中,我在运行时提供了数组大小.
#include <stdio.h>
int main()
{
int i;
scanf("%d",&i);
int a[i];
}
请告诉我上面的代码和使用malloc()的代码之间的区别.
我知道数组存储在堆栈上,动态内存(malloc,calloc等)在堆上.
那么我的代码功能与malloc类似吗?如果没有,请解释.
最佳答案 除了您的代码使用VLA,其中:
>在C99之前不存在
>作为C99的新功能推出
>现在是C11以来的可选功能
不同之处在于自动数组(VLA或静态大小的数组)在超出范围时会自动释放,因此您无法从函数返回它们,而动态分配的数据会持续存在直到它们被明确释放 – 这将在您丢失之前发生如果你不想要内存泄漏,请指向它们.