EXC_BAD_ACCESS исключение времени выполнения при доступе к структурным переменным-> Цель C - PullRequest
2 голосов
/ 14 мая 2011
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 ]

2 голосов
/ 14 мая 2011

Попробуйте:

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

У вас неправильный доступ, поскольку вы не выделили память для pEvent, только что объявлен указатель.

1 голос
/ 14 мая 2011

Для глобальной структуры вам не нужен указатель, если вы не используете malloc, вот так:

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

Затем pEvent.a = 10 для доступа.

Лучшим дизайном может бытьоднако используйте объектно-ориентированные шаблоны, такие как синглтоны или метод класса, для доступа к вашей структуре данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...