Kurze Frage zu Pointern



  • Hallo ich starte zu erst Programm 1

    int *ptr
    

    hat die Adresse 18FF50

    Programm 1 ist noch gestartet, jetzt starte ich Programm 2 auch in Programm 2 hat die Variable

    int *ptr
    

    die 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


Anmelden zum Antworten