Probleme mit Pointern



  • Hier erst mal der Code:

    // more pointers
    #include <iostream>
    using namespace std;
    
    int main ()
    {
      int value1 = 5, value2 = 15;
      int *p1, *p2;
      cout << "value1==" << value1 << "/ value2==" << value2 <<"\n";
      cout << "p1==" << p1 << "/ p2==" << p2 <<"\n";
    
      p1 = &value1;     // p1 = address of value1
      cout << "value1==" << value1 << "/ value2==" << value2 <<"\n";
      cout << "p1==" << p1 << "/ p2==" << p2 <<"\n";
    
      p2 = &value2;     // p2 = address of value2
      cout << "value1==" << value1 << "/ value2==" << value2 <<"\n";
      cout << "p1==" << p1 << "/ p2==" << p2 <<"\n";
    
      *p1 = 10;         // value pointed by p1 = 10
      cout << "value1==" << value1 << "/ value2==" << value2 <<"\n";
      cout << "p1==" << p1 << "/ p2==" << p2 <<"\n";
    
      *p2 = *p1;        // value pointed by p2 = value pointed by p1
      cout << "value1==" << value1 << "/ value2==" << value2 <<"\n";
      cout << "p1==" << p1 << "/ p2==" << p2 <<"\n";
    
      p1 = p2;          // p1 = p2 (value of pointer copied)
      cout << "value1==" << value1 << "/ value2==" << value2 <<"\n";
      cout << "p1==" << p1 << "/ p2==" << p2 <<"\n";
    
      *p1 = 20;         // value pointed by p1 = 20
      cout << "value1==" << value1 << "/ value2==" << value2 <<"\n";
      cout << "p1==" << p1 << "/ p2==" << p2 <<"\n";
    
      return 0;
    }
    

    Warum ist p1 am anfang nicht mit "0" belegt, p2 aber schon?

    Falls es hilft, ich verwende Dev-C++ 4.9.9.2.

    Danke



  • die anfangsbelegung bei uninitialisierten zeigern ist von der sprache nicht definiert. da kann alles drin sein.

    probier mal

    int main ()
    {
      int value1 = 5, value2 = 15;
      cout<<""<<""<<"";
      int *p1, *p2;
      ...
    

    ist da immernoch das gleiche?



  • Kommt immer noch genau das gleiche, die Adresse in p1 is sogar die selbe wie ohne die neue Zeile.

    Ohne und auch mit der Zeile kommt:

    p1==0x22ffa8/ p2==0
    

    Ich Frage ja nur, weil der eine auf "0" ander andere auf einen "realen" Wert verweist. Ich bin davon ausgegange, daß soetwas einheitlich geregelt ist.

    bobjob



  • Kompilier mal im Release-Modus.



  • Auch nach über einer Stunde suchen, habe ich nicht herausgefunden, wo man in Dev-C++ den Release-Modus aktivieren kann. Zu dem verstehe ich nicht, was das mit den Initialisierungswerten der Pointer zu tun hat.

    bobjob



  • bobjob schrieb:

    Auch nach über einer Stunde suchen, habe ich nicht herausgefunden, wo man in Dev-C++ den Release-Modus aktivieren kann. Zu dem verstehe ich nicht, was das mit den Initialisierungswerten der Pointer zu tun hat.

    bobjob

    Im Debug-Modus kuemmert sich der Debugger darum, dass alle Variablen einen
    definierten Wert besitzen. Der Debugger ist auch ein Grund dafuer, dass deine
    Variablen immer an der selben Adresse liegen.

    Deswegen mal ohne Debug-Informationen uebersetzen. Wie man den beim Dev-Cpp
    einstellt, kann ich dir auch nicht sagen 😉

    mfg
    v R



  • bobjob schrieb:

    Ich Frage ja nur, weil der eine auf "0" ander andere auf einen "realen" Wert verweist.

    Lass es gut sein Bob, volkard hat doch schon alles gesagt. Wenn du wissen willst, warum genau jene Adresswerte in den Zeigern stehen, dann solltest du dir den Source deines Compilers anschaun. Wesentlich sinnvoller wäre allerdings, wenn du dir mal anschaust, was nicht initialisiert und undefiniert bedeutet.



  • @virtuell Realisticer:

    Danke, das mit dem Debugmodus wußte ich nicht, um das abschalten muß ich mich noch kümmern.

    @groovemaster:

    Das mit dem nicht initialisiert und dem undefiniert sollte ich mir wirklich mal angucken 😃 .

    bobjob


Anmelden zum Antworten