访问结构变量时的EXC_BAD_ACCESS运行时异常 - >目标C.

时间:2011-05-14 04:43:00

标签: objective-c

test.h
-------
struct session {
    int a;
    int c;
    int b;
};
struct session* pEvent;
#import <Foundation/Foundation.h>


@interface test : NSObject {

}
-(void)set;
@end

test.m
--------

#import "test.h"


@implementation test

-(id)init{
    pEvent->a=10;
    pEvent->c='a';
    pEvent->b=20;
    return self;
}
-(void)set{

    //struct session* pEvent;
    //pEvent->a=10;
    //pEvent->c='a';
    //pEvent->b=20;
    NSLog(@"a:%d c:%c b:%d",pEvent->a,pEvent->c,pEvent->b);

}

@end

我得到EXC_BAD_ACCESS运行时异常,调试器在

时指向pEvent->a

在init方法内部或set方法内部声明。

我是否需要将结构初始化为pEvent = new session;?如果这样宣布我是

获得新的未申报错误。然后我尝试使用pEvent = [session new];pEvent = [[session alloc]init];如果这样宣布我会收到会话未声明的错误。

2 个答案:

答案 0 :(得分:2)

试试这个:

struct session {
    int a;
    int c;
    int b;
} pEventStruct;
struct session* pEvent = &pEventStruct;

由于你没有为pEvent分配内存,只是声明了一个指针,你的访问权限很差。

答案 1 :(得分:1)

对于全局结构,除非你使用malloc,否则你不需要指针,所以这样:

struct session {
    int a;
    int c;
    int b;
};
struct session pEvent;

然后pEvent.a = 10访问。

更好的设计可能是使用面向对象的模式,如单例或类方法来访问您的数据结构。