Kurze Frage zu Pointern
-
Hallo ich starte zu erst Programm 1
int *ptrhat die Adresse 18FF50
Programm 1 ist noch gestartet, jetzt starte ich Programm 2 auch in Programm 2 hat die Variable
int *ptrdie Adresse 18FF50 aber wieso wird in Programm 2 keine 10 ausgeben ?
Programm 1
#include <iostream> using namespace std; int main(int argc, char* argv[]) { int *ptr=0; int z = 10; ptr = &z; cout<<"addr: " << &ptr <<endl; cout<< *ptr<<endl; system("PAUSE"); }Programm 2
#include <iostream> using namespace std; int main(int argc, char* argv[]) { int *ptr=0; cout<<"addr: " << &ptr <<endl; cout<< *ptr <<endl; system("PAUSE"); }
-
Erstens mußt du dir den Unterschied klar machen zwischen dem Inhalt einer Variable und ihrer Adresse.
Zweitens dereferenzierst du im zweiten Programm einen Null-Zeiger.
Und drittens hat tpyischerweise jedes Programm seinen eigenen Adresseraum - um die Speicherinhalte eines anderen Programms lesen zu können, mußt du schon ein wenig tiefer ins System einsteigen.
-
Also wird für jedes Programm ein extra Speicherbereich angelegt ?
Den Speicher eines anderen Programmes könnte ich ja mit der WIN API Funktion ReadProcessMemory auslesen.
Hat das ganze was mit Virtual Address Space zu tun ?
-
*ptr schrieb:
Hat das ganze was mit Virtual Address Space zu tun ?
Genau das dürfte es sein.
-
Danke für die Antwort dann werde ich mir das hier mal anschauen:
http://msdn.microsoft.com/en-us/library/aa366525(v=vs.85).aspx