【发布时间】:2018-10-15 20:53:25
【问题描述】:
下面是相当基本的objective-c 代码。它包含一个实例变量i。问题是每当我尝试分配给它时,它几乎会在分配操作之后立即导致段错误。注意:它不会在分配点发生段错误。通常它在分配后出现段错误,我尝试调用一个方法。另外,请注意这不是您的标准 mac/apple Objective-c 代码。我正在使用 cygwin (Linux) 普通版的objective-c。所以我必须生成自己的alloc 和dealloc 方法。
#import <objc/runtime.h>
#import <objc/Object.h>
@interface Test
{
int i;
}
+(id)alloc;
- (id) init;
- (int) load;
@end
@implementation Test
+(id)alloc
{
self = class_createInstance(self,0);
return self;
}
-(id)init
{
i = 0; // <------ if I comment out this line, there is no segfault
return self;
}
-(int) load
{
return i;
}
@end
int main(int argc, const char * argv[])
{
Test * test = [[Test alloc] init];
int v = [test load]; //segfaults here (NOTE: if I comment out this line, it does not segfault)
return 0;
}
是什么导致了段错误?
【问题讨论】:
-
不应该是 if (self = [super init]) { i = 0; } ?
-
+alloc赋值给self后返回有点奇怪。那最初是类对象(大致是Class self),因此为它分配一个实例是“错误的”。不过,不知道这是否重要。 -
@onnoweb 这是一个根类。没有超类。
标签: objective-c segmentation-fault