<分区>
在下面的代码中,我在运行时提供了数组的大小。
#include <stdio.h>
int main()
{
int i;
scanf("%d",&i);
int a[i];
}
请告诉我上面的代码和使用malloc()
的代码之间的区别。
我知道数组存储在堆栈上,动态内存(malloc
、calloc
等)在堆上。
那么我的代码功能是否类似于 malloc
?如果不是,请解释。
标签 c
<分区>
在下面的代码中,我在运行时提供了数组的大小。
#include <stdio.h>
int main()
{
int i;
scanf("%d",&i);
int a[i];
}
请告诉我上面的代码和使用malloc()
的代码之间的区别。
我知道数组存储在堆栈上,动态内存(malloc
、calloc
等)在堆上。
那么我的代码功能是否类似于 malloc
?如果不是,请解释。
最佳答案
除了您的代码使用 VLA 之外:
不同之处在于,自动数组(VLA 或静态大小的数组)在超出范围时会自动释放,因此您不能从函数返回它们,而动态分配的数组会一直存在,直到它们被显式释放 - 这应该发生在之前如果您不想内存泄漏,您将丢失指向它们的指针。
关于c - 在运行时提供数组大小与动态内存分配之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40904047/