我有一个空的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.请帮我解决这个崩溃.谢谢
不要在堆栈上分配,因为它可以具有有限的大小.而是使用堆并记住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)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |