[英]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.