我有一个空的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.请帮我解决这个崩溃。感谢
答案 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];