我包括整个项目,所以没有什么是模糊的。
A.H
#import <Foundation/Foundation.h>
@interface A : NSObject
-(void) zero;
@end
A.M
#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时程序在函数0中崩溃。我还想指出,如果你删除
[[A alloc] init];
从ViewController的实现,该程序不会崩溃。提前感谢您的帮助。
答案 0 :(得分:2)
让board
成为A级的ivar,你的问题应该消失。现在它是全局的,第二个[[A alloc] init];
是free
它(看起来你启用了ARC,并且llvm将看到该对象实际上没有被使用并立即释放它。)< / p>
当您调用
时 [_gameBoard zero];
现在它正在尝试引用free
全局board
,这会引发EXC_BAD_ACCESS异常。
像board
这样的全球通常是一个坏主意,正如你所发现的那样。
答案 1 :(得分:1)
您的代码中存在多个问题。首先,创建另一个A
实例并且不将其分配给变量是没有意义的。
但主要问题是您在ViewController
(_gameBoard
)和A
(uint8_t** _board
)上都没有使用实例变量(或属性)。
使它们成为实例变量(或属性)应该可以解决您的问题。
PS:您可能也想使用NSArray
而不是C风格的数组。