Considérez l'application iPhone Objective-C++ suivante (TestMemAppDelegate.mm). Il se bloque avec un EXC_BAD_ACCESS sur l'iPhone (3GS avec iOS 4.0). Cela fonctionne très bien dans le simulateur. Il s'agit clairement d'un problème d'alignement de la mémoire, car il fonctionne correctement sur l'iPhone si la structure "DataA" démarre sur une bordure de 8 octets.Un accès mémoire non aligné sur 8 octets entraîne une violation de l'accès mémoire sur l'iPhone 3GS avec iOS 4.0
Quelqu'un peut-il expliquer la cause? Est-ce quelque chose avec l'architecture ARM? Compilateur ARM?
@implementation TestMemAppDelegate
typedef struct DataA
{
float x;
unsigned char y;
};
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
char* mem1 = (char*)malloc(4096);
DataA* ptrA = (DataA*)(mem1 + 1); // Here we shift the alignment
ptrA->x = 10.0f;
printf("A: %.2f\n", ptrA->x); // Here it crashes
// Add the view controller's view to the window and display.
[window addSubview:viewController.view];
[window makeKeyAndVisible];
return YES;
}
@end
Merci. Sur la base de votre réponse, je l'ai trouvée dans la documentation: http://www.keil.com/support/man/docs/ca/ca_ap_byte_alignment.htm –