Objective-C : 2 차원 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 가드 malloc을 실행하려고한다 참조 : <p>2 차원 배열</p>는 다음과 같이 할당 될 것이다. 29 may. 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 차원 배열이 아니다. 배열에 대한 포인터 배열입니다.

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

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