Сбой памяти: трехмерный массив в игре Cocos2d - PullRequest
0 голосов
/ 16 апреля 2019

Вот код:

Декларация в .ч

@interface LevelManager : NSObject{

}
@property int ***construtorDeMundo;

Инициализация и malloc

-(id)init {
    self = [super init];
    if(self != nil){
        construtorDeMundo = (int***) malloc ( NUMFASES * sizeof(int *));

        for (int i = 0; i < NUMFASES ; i++) {
            construtorDeMundo[i] = (int**) malloc (MAX_PONTOS_CRITICOS * sizeof(int));
        }

        for (int i = 0; i < NUMFASES; i++)
            for (int j = 0; j < MAX_PONTOS_CRITICOS; j++) {
                construtorDeMundo[i][j] = (int*) malloc (PROPRIEDADES * sizeof(int));
                for (int k = 0; k < PROPRIEDADES ; k++)
                    construtorDeMundo[i][j][k] = 0;
            }

        [self pegaInformacoes];
    }
    return self;
}

Код для доступа:

 for (int j = 1; j < [elements count]; j++) {
            if(j <= PROPRIEDADES+1){
                NSString *valor = (NSString *)[elements objectAtIndex:j];
                construtorDeMundo[fase][i][j-1] = [((NSNumber*)valor) intValue];
            }
        }

Игра случайно вылетает для другого индекса в последней функции Что-то связанное с malloc ... Как исправить? Пожалуйста, помогите мне, если вы знаете.

Извините, код этой игры не на английском ... не написан мной.

Заранее спасибо.

1 Ответ

0 голосов
/ 17 апреля 2019

Наконец-то исправлена ​​проблема.В приведенном выше коде для sizeof () указано неверное значение.

Здесь обновлен код:

-(id)init {
    self = [super init];
    if(self != nil){
        construtorDeMundo = (int***) malloc ( (NUMFASES) * sizeof(*construtorDeMundo));

        for (int i=0; i < NUMFASES; ++i)
            construtorDeMundo[i] = NULL;

        for (int i = 0; i < NUMFASES ; ++i) {
            construtorDeMundo[i] = (int**) malloc (MAX_PONTOS_CRITICOS * sizeof(*construtorDeMundo[i]));
        }

        for (int i=0; i < NUMFASES; ++i)
            for (int j=0; j < MAX_PONTOS_CRITICOS; ++j)
                construtorDeMundo[i][j] = NULL;

        for (int i = 0; i < NUMFASES; ++i)
            for (int j = 0; j < MAX_PONTOS_CRITICOS; ++j) {
                construtorDeMundo[i][j] = (int*) malloc ((PROPRIEDADES) * sizeof(*construtorDeMundo[i][j]));
                for (int k = 0; k < PROPRIEDADES ; k++)
                    construtorDeMundo[i][j][k] = 0;
            }


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