Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C中基于堆栈的数组声明?_Objective C_Arrays_Stack Based - Fatal编程技术网

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

Objective-C中基于堆栈的数组声明?,objective-c,arrays,stack-based,Objective C,Arrays,Stack Based,在Objective-C中,我声明了如下C数组: 整数长度=10 int a[长度] 这不会在Xcode中导致任何错误,但会在其他编译器(如VisualStudio)中导致任何错误。 请告诉我它是怎么工作的。我应该使用它还是使用malloc/calloc?C99中引入了可变长度数组。据我所知,微软当前的编译器(VC2010)不支持C99(或至少不支持它的VLA部分) 您可以使用malloc来做同样的事情,只需记住在完成后释放它即可 比如: int length = 10; int *a = ma

在Objective-C中,我声明了如下C数组:

整数长度=10
int a[长度]

这不会在Xcode中导致任何错误,但会在其他编译器(如VisualStudio)中导致任何错误。
请告诉我它是怎么工作的。我应该使用它还是使用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
,它类似于VLAs,在堆栈上为变量内存块分配空间

但你必须这样。虽然
alloca
在函数退出时自动取消分配,但堆栈通常比
malloc
堆小,如果耗尽堆,则返回NULL。如果你炸了你的堆栈,那可能会表现为崩溃


alloca(n)
对于足够小的
n

值可能是可以接受的。您也可以使用
alloca()
以动态大小执行基于堆栈的分配。@Kevin:是的,这会在一定程度上起作用,然后在炸毁堆栈时会严重崩溃:-),尽管VLAs可能也是这样。解释得很好。谢谢paxdiablo。