Objective-C中基于堆栈的数组声明?

nmi*_*tai 2 arrays objective-c stack-based

在Objective-C中,我声明了一个像这样的C数组:

int length = 10;
int a [length];

这不会导致Xcode中的任何错误,但会导致其他编译器,如Visual Studio.请告诉我它是如何工作的.我应该使用它还是使用malloc/calloc?

pax*_*blo 6

在C99中引入了可变长度阵列.据我所知,微软目前的编译器(VC2010)不支持C99(或至少是VLA的一部分).

可以malloc做同样的事情,你只需要记住free它,当你完成.

就像是:

int length = 10;
int *a = malloc (length * sizeof(int));
if (a == NULL) {
    doSomethingIntelligentSinceNoMemoryLeft();
} else {
    useToHeartsContent (a[0], "thru", a[9]);
    free (a);
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用alloca类似于VLA的方法,因为它在堆栈上为变量内存块分配空间.

但你必须要小心.虽然alloca在函数退出时自动取消分配,但堆栈通常是比malloc堆小的资源,如果耗尽堆,它会返回NULL.如果你炸掉你的筹码,这可能会表现为崩溃.

alloca(n)对于足够小的值,可能是可以接受的n.