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

时间:2016-02-02 08:06:48

标签: ios objective-c

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

- (void)viewDidLoad {
    [super viewDidLoad];
    uint8_t pixelData[360 * 360 * 4];
    uint8_t sapixelData[360 * 360 * 4];
}

当我在iPad air 2上运行该应用程序时,它会因EXC_BAD_ACCESS代码1而崩溃。

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

- (void)viewDidLoad {
    [super viewDidLoad];
    uint8_t pixelData[60 * 360 * 4];
    uint8_t sapixelData[60 * 360 * 4];
}

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

1 个答案:

答案 0 :(得分:6)

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

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

...

free(sapixelData);
free(pixelData);

最好还是使用NSMutableData,因为它会自行清理:

NSMutableData *pixelData = [NSMutableData dataWithLength:60 * 360 * 4];
NSMutableData *sapixelData = [NSMutableData dataWithLength:60 * 360 * 4];