EXC_BAD_ACCESS when simply casting a pointer in Obj-C

Posted by AlexChilcott on Stack Overflow See other posts from Stack Overflow or by AlexChilcott
Published on 2010-05-15T12:10:06Z Indexed on 2010/05/15 12:14 UTC
Read the original article Hit count: 199

Hi all,

Frequent visitor but first post here on StackOverflow, I'm hoping that you guys might be able to help me out with this. I'm fairly new to Obj-C and XCode, and I'm faced with this really... weird... problem. Googling hasn't turned up anything whatsoever. Basically, I get an EXC_BAD_ACCESS signal on a line that doesn't do any dereferencing or anything like that that I can see. Wondering if you guys have any idea where to look for this. I've found a work around, but no idea why this works... The line the broken version barfs out on is the line:

LevelEntity *le = entity;

where I get my bad access signal.

Here goes:

THIS VERSION WORKS

  NSArray *contacts = [self.body getContacts];
  for (PhysicsContact *contact in contacts)
  {
   PhysicsBody *otherBody;
   if (contact.bodyA == self.body)
   {
    otherBody = contact.bodyB;
   }
   if (contact.bodyB == self.body)
   {
    otherBody = contact.bodyA;
   }

   id entity = [otherBody userData];
   if (entity != nil)
   {
    LevelEntity *le = entity;

    CGPoint point = [contact contactPointOnBody:otherBody];
   }
  }

THIS VERSION DOESNT WORK

  NSArray *contacts = [self.body getContacts];
  for (NSUInteger i = 0; i < [contacts count]; i++)
  {
   PhysicsContact *contact = [contacts objectAtIndex:i];
   PhysicsBody *otherBody;
   if (contact.bodyA == self.body)
   {
    otherBody = contact.bodyB;
   }
   if (contact.bodyB == self.body)
   {
    otherBody = contact.bodyA;
   }

   id entity = [otherBody userData];
   if (entity != nil)
   {
    LevelEntity *le = entity;

    CGPoint point = [contact contactPointOnBody:otherBody];
   }
  }

Here, the only difference between the two examples is the way I enumerate through my array. In the first version (which works) I use for (... in ...), where as in the second I use for (...; ...; ...). As far as I can see, these should be the same.

This is seriously weirding me out. Anyone have any similar experience or idea whats going on here? Would be really great :)

Cheers, Alex

© Stack Overflow or respective owner

Related posts about objective-c

Related posts about xcode