My code either leaks and works, or doesn't leak and crashes. This doesn't seem like an autorelease problem-Collection of common programming errors

After I finished coding the difficult parts of my game, I found some memory management bugs.

objects is a NSMutableArray holding a custom class.

- (void) spawnObjects
{   
    for (int index = 0; index < INITIAL_OBJECTS; index++)
    {
        [objects addObject:[[[MatchObject alloc] initWithImageNameID:(index % 3)] autorelease]];
        [[objects objectAtIndex:index] setPosition:[GameLayer randomPoint]];
    }

    ...
}

I later use this function.

- (void) checkAllSprites
{

    NSMutableArray *spritesToDelete = [NSMutableArray array];
    for (int index = 0; index < [points count] - 1; index ++)
    {
        for (MatchObject *planetLike in objects)
        {
                CGPoint point1 = [[points objectAtIndex:index] CGPointValue];
                CGPoint point2 = [[points objectAtIndex:index+1] CGPointValue];
                if ([GameLayer lineIntersectsCircle:point1 :point2 :[planetLike position] :16.0f])
                {

                        ParticleSystem *planetDeath = [ParticlePlanetDeath node];
                        planetDeath.texture = [[TextureMgr sharedTextureMgr] addImage:@"fire.pvr"];
                        planetDeath.position = [planetLike position];
                        [self addChild:planetDeath z:0 tag:2];

                        [spritesToDelete addObject:planetLike];

                        [self removeChild:planetLike cleanup:YES];

                }

        }
    }
    [objects removeObjectsInArray:spritesToDelete];
    [spritesToDelete removeAllObjects];

}

If I do not autorelease in the first function, the app works fine. If I do, then I try to access a dealloced object ([MatchObject position]).

What’s wrong?!