#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;
}
Die obigen Code druckt:undefinierte Verhalten beobachtet in C++/Speicherzuordnung
a= 50 b= 50
address a 0x7ffdd7b1b710 address b= 0x7ffdd7b1b714
Während, wenn ich die folgende Zeile aus dem obigen Code entfernen
cout<<"address a "<<&a<<" address b= "<<&b<<endl;
ich Ausgabe als
a= 40 b= 50
Mein Verständnis war, dass die Stapel wächst nach unten, so scheint die zweite Antwort die richtige zu sein. Ich bin nicht in der Lage zu verstehen, warum die print-Anweisung das Speicherlayout durcheinander bringen würde.
EDIT:
ich vergaß zu erwähnen, ich bin mit 64-Bit-x86-Maschine, mit O als ubuntu 14.04 und gcc Version 4.8.4
Es ist * nur undefiniert Verhalten *. – juanchopanza
In VS2005 nicht der Fall. Ich führe den oben genannten Code mit und ohne die 'cout << "Adresse eine" << .. 'Zeile und das Ergebnis ist a = 50, b = 50 in beiden Fällen. – Makif