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

标签 objective-c arrays stack-based

在 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/

相关文章:

c++ - 我需要 C++ 数组类模板,它是固定大小的、基于堆栈的并且不需要默认构造函数

c++ - 基于堆栈的缓冲区溢出

ios - 将 GIF 附加到 TWTRComposer?

ios - 在uitableviewcell中异步加载图像

javascript - 将值推送到数组末尾添加未定义

c - 解释如何仅使用这两行 : 在 C 中为二维数组分配和释放内存

ios - 将 BOOL 声明为 iVar 或 Property 的最佳途径

iphone - 当 youtube 视频结束或按下完成按钮时 iOS 捕获事件

c++ - 将数组传递给增强 vector 元组