2

在 Objective-C 中,我声明一个 C 数组,如下所示:

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

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

4

1 回答 1

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);
}

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

但是你必须小心。虽然alloca在函数退出时自动取消分配,但堆栈通常是比malloc堆更小的资源,如果你用尽了堆,它会给你返回 NULL。如果你炸毁了你的堆栈,那可能会表现为崩溃。

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

于 2011-10-31T07:34:20.277 回答