在下面的代码中,我在运行时提供了数组大小。
1:<span>todo:test<span>
请告诉我上面的代码与使用#include <stdio.h>
int main()
{
int i;
scanf("%d",&i);
int a[i];
}
的代码之间的区别。
我知道数组存储在堆栈上,动态内存(malloc()
,malloc
等)在堆上。
那么我的代码是否与calloc
类似?如果没有,请解释。
答案 0 :(得分:1)
除了你的代码使用VLA:
不同之处在于自动数组(VLA或静态数组)在超出范围时会自动释放,因此您无法从函数返回它们,而动态分配的数据会持续存在直到它们被明确释放 - 这将在之前发生如果您不想要内存泄漏,则会丢失指向它们的指针。
答案 1 :(得分:0)
Above语句适用于C99,但使用此方法存在局限性:
int a[i]
是可变长度数组,而不是动态内存 已分配,因此它将存储在STACK而不是HEAP“它存在 在malloc的情况下“因此当有人进入时会出现这种情况 MAX_INT和STACK内存限制非常少(例如:嵌入式 系统)然后可能发生堆栈损坏。