在方法中分配实例差异会导致段错误

时间:2018-10-15 20:53:25

标签: objective-c segmentation-fault

下面是相当基本的Objective-C代码。它包含一个实例变量i。问题是,无论何时我尝试分配给它,都会在该分配操作之后立即导致段错误。注意:在分配时它不会分段。通常在分配后它会出现段错误,而我尝试调用一个方法。另外,请注意,这不是您的标准mac / apple Objective-c代码。我正在使用cygwin(Linux)普通香草版本的Objective-C。因此,我必须生成自己的allocdealloc方法。

#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;
}

是什么导致段错误?

1 个答案:

答案 0 :(得分:1)

我希望对于像您这样的根类,您需要显式声明Public Sub buttonEventHandler_Click(Sender As Integer) Select Case Sender Case 1 'Do Stuff End Select End Sub Private Sub workbook_open() Sheet1.Frame1.Activate Set xbtn = New Collection Dim o As Object Dim xB As New XButton xB.createObject Sheet1.Frame1.Controls("excelCommandButton"), ThisWorkbook, 1 xbtn.Add xB Set xB = Nothing End Sub 实例变量。没有它,您的isa就会被解释为i,这就是为什么会崩溃的原因。

所以:

isa

如果您不想创建根类,则可能应该继承自@interface Test { Class isa; int i; } 之类。