随着阵列大小的增加,应用程序崩溃

Nav*_*han 2 objective-c ios

我有一个空的iOS应用程序.唯一的代码是创建两个数组.

- (void)viewDidLoad {
    [super viewDidLoad];
    uint8_t pixelData[360 * 360 * 4];
    uint8_t sapixelData[360 * 360 * 4];
}
Run Code Online (Sandbox Code Playgroud)

当我在iPad air 2上运行该应用程序时,它会崩溃并显示EXC_BAD_ACCESS代码1.

假设我将数组的大小减小到以下,

- (void)viewDidLoad {
    [super viewDidLoad];
    uint8_t pixelData[60 * 360 * 4];
    uint8_t sapixelData[60 * 360 * 4];
}
Run Code Online (Sandbox Code Playgroud)

该应用程序不会崩溃.我的要求要求阵列大小为360*360*4.请帮我解决这个崩溃.谢谢

tro*_*foe 6

不要在堆栈上分配,因为它可以具有有限的大小.而是使用堆并记住free()之后的内存:

uint8_t *pixelData = malloc(60 * 360 * 4);
uint8_t *sapixelData = malloc(60 * 360 * 4);

...

free(sapixelData);
free(pixelData);
Run Code Online (Sandbox Code Playgroud)

更好的是仍然使用NSMutableData,因为它将自我清理:

NSMutableData *pixelData = [NSMutableData dataWithLength:60 * 360 * 4];
NSMutableData *sapixelData = [NSMutableData dataWithLength:60 * 360 * 4];
Run Code Online (Sandbox Code Playgroud)