Цель-C: Как создать класс с массивом 2d C в качестве поля? - PullRequest
0 голосов
/ 22 февраля 2009

Каждый раз, когда я вызываю функцию doSomething, моя программа падает. Фактический код как проверка границ массива, так что я знаю, что это не проблема.

myClass.h

#import <Foundation/Foundation.h>
@interface myClass : NSObject {
    BOOL **myMatrix;

}
@property(readwrite) BOOL **myMatrix;

-(myClass*)initWithWidth: (int)w andHeight: (int)h;
-(void)doSomething;
+(BOOL **) createMatrixWithHeight: (int)h andWidth: (int)w;

@end

myClass.m

#import "myClass.h"
#import <Foundation/Foundation.h>

@implementation myClass

@synthesize myMatrix;

-(myClass*)initWithWidth: (int)w andHeight: (int)h    {
    self = [super init];
    myMatrix = [myClass createMatrixWithHeight: h andWidth: w];
    return self;
}

-(void)doSomething{
    myMatrix[2][2] = YES;
}

+(BOOL **) createMatrixWithHeight: (int)h andWidth: (int)w{
    BOOL **newMatrix;

    newMatrix = malloc(w * sizeof(BOOL *));

    int i;
    for(i = 0; i < w; i++){
        newMatrix[i] = malloc(h * sizeof(BOOL));
    }

    return newMatrix;
}
@end

Ответы [ 2 ]

1 голос
/ 13 марта 2011

Это:

newMatrix = malloc(w * sizeof(BOOL *));

int i;
for(i = 0; i < w; i++){
    newMatrix[i] = malloc(h * sizeof(BOOL));
}

не является двумерным массивом. Это массив указателей на массив.

2-мерный массив будет выделен как:

newMatrix = malloc(w * h * sizeof(BOOL));

См. http://en.wikipedia.org/wiki/C_syntax#Multidimensional_arrays

1 голос
/ 22 февраля 2009

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

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

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