gpt4 book ai didi

ios - Objective C (iOS) 中的 VLA 可变长度数组,会发生什么?

转载 作者:行者123 更新时间:2023-11-28 22:18:09 25 4
gpt4 key购买 nike

在维护 iOS 应用程序的一些代码时,我发现了以下内容:

CLLocationCoordinate2D inputArray[size]; // CLLocationCoordinate2D is a struct containing two doubles
for (int i = 0; i < size; i++) {
inputArray[i] = ... ; // Fill the array
}
CLLocationCoordinate2D outputArray[size];
functionThatConvertsInputToOutput(inputArray, outputArray, size);

这里我们正在分配两个动态大小的结构数组(无法在编译时确定大小)。所谓的“可变长度数组”,基于那个 SO 问题(Declare Dynamic Array)。

我很清楚这甚至不能在 C/C++ 中编译,并且在查看类似问题时,答案通常是“使用 malloc”或“使用 NS(Mutable)Array”。

但我还没有真正找到问题的答案:

在 Objective C 中声明 int array[size]; 时会发生什么?

我想知道的原因是我在上面复制的代码片段在使用相当大的尺寸 (36000) 时崩溃,而在使用 malloc 时不会崩溃:

CLLocationCoordinate2D *inputArray = malloc(sizeof(CLLocationCoordinate2D) * size);
CLLocationCoordinate2D *ouputArray = malloc(sizeof(CLLocationCoordinate2D) * size);

编辑 #1:维基百科对 VLA 的看法 http://en.wikipedia.org/wiki/Variable-length_array

编辑 #2:崩溃是 EXC_BAC_ACCESSfunctionThatConvertsInputToOutput 或调用 functionThatConvertsInputToOutput 的奇怪地方。

最佳答案

它很可能将数组的内存粘在堆栈上,这就是为什么当您将堆栈放大 36,000 * sizeof(CLLocationCoordinate2D) 时会崩溃的原因。

关于ios - Objective C (iOS) 中的 VLA 可变长度数组,会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21089329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com