Objective-C: Как создать класс с массивом 2d C в качестве поля?


0

Всякий раз, когда я вызываю функцию 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 
  0

Может быть, вы должны попытаться запустить с Lib караульной таНос. 29 май. 092009-05-29 10:17:30

1

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

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


1

Это:

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

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

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

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

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

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