【发布时间】:2011-07-25 22:17:44
【问题描述】:
我有一个具有以下 init 方法的类:
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
StateStack* s = [[StateStack alloc] init];
state = s;
[s push:NONE]; //<--EXC_BAD_ACCESS on load here
[s release];
}
return self;
}
StateStack 有如下初始化代码:
- (id)init {
self = [super init];
if (self) {
NSMutableArray* s = [[NSMutableArray alloc] init];
stack = s;
[s release];
NSLog(@"%d",[stack retainCount]);
}
return self;
}
奇怪的是,如果我删除 NSLog 行,EXC_BAD_ACCESS 会移动到 StateStack 的 dealloc 方法:
- (void)dealloc {
[stack release]; //<--EXC_BAD_ACCESS
[super dealloc];
}
四处搜索似乎表明 EXC_BAD_ACCESS 是由过度释放引起的,但我看不出我是如何过度释放任何东西的。有谁知道可能是什么原因?
【问题讨论】:
标签: objective-c exc-bad-access