在 Objective-C 中,我声明一个 C 数组,如下所示:
int length = 10;
int a[length];
这不会在 Xcode 中导致任何错误,但会在 Visual Studio 等其他编译器中导致任何错误。 请告诉我它是如何工作的。我应该使用它还是使用 malloc/calloc 代替?
最佳答案
可变长度数组是在 C99 中引入的。据我所知,微软当前的编译器(VC2010)不支持C99(或者至少是它的VLA部分)。
您可以使用malloc
来做同样的事情,您只需记住在完成后释放
它。
类似于:
int length = 10;
int *a = malloc (length * sizeof(int));
if (a == NULL) {
doSomethingIntelligentSinceNoMemoryLeft();
} else {
useToHeartsContent (a[0], "thru", a[9]);
free (a);
}
您也可以使用 alloca
,它与 VLA 类似,它在堆栈上为变量内存块分配空间。
但你必须是careful 。虽然alloca可以在函数退出时自动解除分配,但堆栈通常是比malloc堆更小的资源,如果耗尽堆,它会返回NULL 。如果你耗尽了你的堆栈,那可能会表现为崩溃。
对于足够小的 n 值,alloca(n)
可能是可以接受的。
关于objective-c - Objective-C 中基于堆栈的数组声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7950956/