[英]presentViewController crashes with EXC_BAD_ACCESS on iOS 8
[英]iOS app crashes with EXC_BAD_ACCESS
我包括整個項目,所以沒有任何歧義。
啊
#import <Foundation/Foundation.h>
@interface A : NSObject
-(void) zero;
@end
上午
#import "A.h"
@implementation A
#define width 3
#define height 3
uint8_t** _board;
-(void) zero
{
for(int i = 0; i < width; i++)
for(int j = 0; j < height; j++)
_board[i][j] = 0;
}
-(void)dealloc
{
for(int i = 0; i < width; i++)
free(_board[i]);
free(_board);
}
-(id) init
{
self = [super init];
if(self)
{
_board = malloc(sizeof(uint8_t*)*width);
for(int i = 0; i < width; i++)
_board[i] = malloc(sizeof(uint8_t)*height);
}
return self;
}
@end
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
ViewController.m
#import "ViewController.h"
#import "A.h"
@implementation ViewController
A* _gameBoard;
- (void)viewDidLoad
{
[super viewDidLoad];
_gameBoard = [[A alloc] init];
[[A alloc] init];
[_gameBoard zero];
}
@end
具體來說,設置_board時,程序會在功能零中崩潰。 我還要指出,如果您刪除
[[A alloc] init];
從ViewController的實現中,程序不會崩潰。 預先感謝您的幫助。
將board
設為A類的ivar,您的問題就應該解決了。 現在,它是全局的,第二個[[A alloc] init];
正在free
它(似乎您已啟用ARC,並且llvm會看到該對象實際上並未被使用並立即釋放它)。
調用時
[_gameBoard zero];
現在它正在嘗試引用free
'd全局board
,該board
拋出EXC_BAD_ACCESS異常。
正如您所發現的那樣,像board
這樣的全球人士通常不是一個好主意。
您的代碼中有幾個問題。 首先,創建另一個A
實例並將其分配給變量沒有任何意義。
但是主要的問題是您既不在ViewController
( _gameBoard
)上也沒有在A
( uint8_t** _board
)上使用實例變量(或屬性)。
使它們成為實例變量(或屬性)應該可以解決您的問題。
PS:您可能還想使用NSArray
而不是C樣式的數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.