下面是相当基本的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;
}
是什么导致段错误?
答案 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;
}
之类。