初始化结构时的EXC_BAD_ACCESS

时间:2015-07-24 16:45:27

标签: objective-c macos

我正在开发Objective-C / OSX中的应用程序(第一次尝试)。我有一个struct(NSDevice自定义类型),需要作为public / extern变量访问,以允许类的不同接口访问它。

这是标题中的声明。

wonderlandwonderland
*********    *
********    **
********    *      *
**      **    ******
***      *    ****** 

以及我如何在源文件中实现它

9624

当尝试在init接口中初始化struct时,我得到了一个EXC_BAD_ACCESS。有什么想法吗?

我可以使用" struct"或者在Objective-C中有更好的方法吗?

THX

1 个答案:

答案 0 :(得分:0)

Seb,您需要为Device分配空间。

尝试这样做:

- (id)init{
    self = [super init];
    if(self){
        NSLog(@"Init");
        LIBMTP_Init();

        Device = malloc(sizeof(NSDevice));
        Device->device = NULL;
        Device->numusbrawdevice = 0;
        Device->rawdeviceID = 0;
        Device->usbrawdevice = NULL;
    }
    return self;
}

并声明你的结构:

typedef struct {
    LIBMTP_raw_device_t * usbrawdevice;
    int numusbrawdevice;
    uint32_t rawdeviceID;

    LIBMTP_mtpdevice_t *device;
} NSDevice;

另外,我 强烈推荐 NSDevice的名称更改为SebDevice或者不以{{1}开头的内容因为这些前缀字符通常表示MacOS SDK内置的内容,并且在您离开项目后,它会混淆任何必须查看代码的人。

最后一件事,像这样的全球变量不应该以大写字母开头。在Objective-C中,最佳实践是变量以小写字母开头,或者可能是NS(对于全局)或下划线。将g更改为Device