Consultez le code suivant:Accès mémoire non aligné: le comportement est-il défini ou non?
#include <iostream>
int main()
{
char* c = new char('a');
char ac[4] = {'a', 'b', 'c', 'd'};
unsigned long long int* u = reinterpret_cast<unsigned long long int*>(c);
unsigned long long int* uc = reinterpret_cast<unsigned long long int*>(&ac[3]);
*u = 42;
*uc = 42;
std::cout<<*u<<" "<<*uc<<std::endl;
}
Est-ce considéré comme un code valide, ou est-il fuite de mémoire/comportement non défini? Je demande, parce que grâce à:
*u = 42;
*uc = 42;
nous accédons octets qui ne devrait pas être accessible par le programme (je suppose).
Recherchez un mot-clé non standard pris en charge par votre compilateur, quelque chose ressemblant '__packed' ou' __unaligned'. –
Vous modifiez la mémoire à laquelle vous ne devriez pas avoir accès. Donc, je ne pense pas que cela soit important que ce soit sur une frontière de mot. –