2011-01-08 52 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