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];
如果这样宣布我会收到会话未声明的错误。
答案 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
访问。
更好的设计可能是使用面向对象的模式,如单例或类方法来访问您的数据结构。