2011-01-08 27 views
0

我正在製作一個OpenGL應用程序,但我收到了一條EXC_BAD_ACCESS消息。NSMutableArray:我如何解決這個'EXC_BAD_ACCESS'代碼?

這裏是我的代碼:

//(draw function only, ask if you need more) 
//objects: array of triangles/quads 
//Triangle/Quad3D: should be obvious, I like OOP 
//PS this is in a 'Composite Object' class 
- (void)draw { 
    //NSLog(@"%@",objects); 
    NSMutableArray *quad, *tri; 
    quad = [NSMutableArray arrayWithCapacity:0]; 
    tri = [NSMutableArray arrayWithCapacity:0]; 
    NSEnumerator *e = [objects objectEnumerator]; 
    id object; 
    while (object = [e nextObject]) { 
     if ([object isKindOfClass:[Triangle3D class]]) { 
      [tri addObject:(Triangle3D *)object]; 
     } else if ([object isKindOfClass:[Quad3D class]]) { 
      [quad addObject:(Quad3D *)object]; 
     } 
    } 
    NSLog(@"%d",[tri count]); 
    NSLog(@"%d",[quad count]); 
    [quad release]; 
    [tri release]; 
    [e release]; 
} 

回答

14

您正在釋放您不擁有,因爲它們自動釋放按在http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html

給出的命名約定你把一個對象,如果所有權的對象您可以使用名稱以「alloc」或「new」開頭或包含「copy」(例如alloc,newObject或mutableCopy)的方法創建它,或者如果您發送它爲保留消息。

+arrayWithCapacity:不以「黃金」或「新」開始,並且不包含「複製」所以你不應該釋放對象返回,除非你明確保留的對象。

+0

哦,謝謝!有效! – Bob 2011-01-08 14:25:51

相關問題