2016-02-02 43 views
2

我有一个空的iOS应用程序。唯一的代码是创建两个数组。随着数组大小的增加应用程序崩溃

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

当我在iPad空气2运行该应用程序将其与EXC_BAD_ACCESS代码崩溃1.

假设我减少阵列到以下的大小,

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

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

回答

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];