#include <iostream>
using namespace std;
int main()
{
int a=50;
int b=50;
int *ptr = &b;
ptr++;
*ptr = 40;
cout<<"a= "<<a<<" b= "<<b<<endl;
cout<<"address a "<<&a<<" address b= "<<&b<<endl;
return 0;
}
Les impressions de code ci-dessus:comportement non défini observé en C++/allocation de mémoire
a= 50 b= 50
address a 0x7ffdd7b1b710 address b= 0x7ffdd7b1b714
Alors que lorsque je retire la ligne suivante du code ci-dessus
cout<<"address a "<<&a<<" address b= "<<&b<<endl;
je reçois sortie comme
a= 40 b= 50
Ma compréhension était que le pile se développe vers le bas, de sorte que la deuxième réponse semble être la bonne. Je ne suis pas capable de comprendre pourquoi la déclaration d'impression gâcherait la mise en page de la mémoire.
EDIT:
J'ai oublié de mentionner, je suis en utilisant la machine x86 64 bits, avec OS qu'Ubuntu 14.04 et la version gcc 4.8.4
Il est juste * un comportement non défini *. – juanchopanza
Ce n'est pas le cas dans VS2005. Je lance le code ci-dessus avec et sans l'adresse 'cout <<" une ligne "<< ..' et le résultat est a = 50, b = 50 dans les deux cas. – Makif