A: 

Sounds like memberA and memberB are floating point members of a class that is experiencing random memory corruption due to your program being written with some errors.

(1) Reference counting error (if you're not using GC) could result in the retain count hitting zero and an object being disposed of, that you are still holding your own reference to. Then the memory can be re-used and cause this interesting result.

(2) Some other pointer math, faulty indirection, or other C programming or ObjectiveC type mistakes (shoot self in foot).

Don't assume these are the only two things that are broken. How about putting the following into your code:

// in your class declaration 1
int Magic1;
float MemberB;
int Magic2;
// same thing in class declaration 2:
int Magic1;
float MemberA;
int Magic2;


// somewhere else like your setup code for each of the two classes:
Magic1 = MAGIC_1;
Magic2 = MAGIC_2;

// somewhere else where the bug occurs
if (Magic1 != MAGIC_1) || (Magic2 != MAGIC_2) { ... do something helpful like NSLog(...)  ... }
Warren P
Thanks for the troubleshooting pointers Warren. I wound up just simplifying step by step until the problem went away, turns out it had to do with my not having a handle on how to mix Objective C and C++.
morgancodes