如何使用堆栈(而不是堆)动态分配内存?
他们是否需要与malloc()
,calloc()
不同的功能?使用哪个头文件?
答案 0 :(得分:3)
alloca(3)
是您正在寻找的功能。
void test_alloca(int num)
{
int *myarray = alloca(num * sizeof(int));
// do not try to free(myarray) !
}
在C99中,您还可以声明variable-length array:
void test_vla(int num)
{
int myarray[num];
}
这两个代码段在功能上是相同的。 (例外情况是第一个声明指针而第二个声明一个数组,如果你取sizeof(myarray)
会导致不同的结果。)
答案 1 :(得分:1)