2016-02-02 75 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];