2011-02-27 71 views
0

我有一個SpriteObject類:雪碧數組初始化奇怪的問題

SpriteObject.h

#import "cocos2d.h" 

@interface SpriteObject : CCNode { 

    int spriteType; 
} 

-(id) init; 

@property(readwrite, assign) int spriteType; 

@end 

SpriteObject.mm

#import "SpriteObject.h" 

@implementation SpriteObject 
@synthesize spriteType; 

-(id) init 
{ 
    if ((self = [super init])) 
    { 

    } 

    return (self); 
} 
@end 
在HelloScene類

然後,我得到了一個VAL SpriteObject * gridSprites [3] [3];

HelloWorldScene.h

@interface HelloWorld : CCLayer 
{ 
    SpriteObject *gridSprites[3][3]; 
} 

我試圖給init gridSprites這樣的:

HelloWorldScene.m中

-(id) init 
{ 
    if((self=[super init])) { 

     for(int i =0; i< 3 ; i++) 
     { 
      for(int j =0; j< 3 ; j++) 
      { 
       SpriteObject * s = [[SpriteObject alloc] init]; 
       gridSprites[i][j] = s; 
       [s release]; 

       gridSprites[i][j].spriteType = -1; 
      } 
     } 
    } 
    return self; 
} 

如果我建立& &運行它,一切都很好,但如果我在 行「gridSprites [i] [j] .spriteType = -1;」處設置斷點並嘗試跳過它,則 應用程序崩潰,我GOR一個錯誤信息說:

Current language: auto; currently objective-c 
Program received signal: ?EXC_BAD_ACCESS?. 

我駕駛堅果,任何人可以幫助我在這裏,感謝 提前...

+0

您創建一個SpriteObject並將gridSprite [i] [j]指向s,但在此之後您釋放s。這會使gridSprite [i] [j]指針被移除,不再指向s,因此當您嘗試再次訪問gridSprites [i] [j] .spriteType = -1時。該對象不能被發現這就是爲什麼訪問不當。 – 2011-02-28 03:42:03

回答

0

ü不能釋放,如果你還是廣域網訪問到雙陣列..

釋放它在的dealloc ..

指:

-(void)dealloc 
{ 
for(int i = 0; i<3 ; i++) 
{ 
    for(int j = 0; j<3; j++) 
    { 
     [gridSprites[i][j]release]; 
    } 
} 
[super dealloc]; 
}