Inhalt von Variable verschwunden



  • hallo,
    wie ich wieder mal feststellen muss ist mein Computer ein Zauberkünstler und zeigt mir dauernd dass er bei folgender Übergabe den Inhalt der Variable verschwinden lässt, vielleicht kann mir jemand helfen und den Fehler finden, oder ich hab einfach nur Tomaten auf den Augen:

    int *A=1, input=0;
    ...
    try
    	{
    		cin >> input;	
    		*A = input;    // Problem: wenn ich noch vorher 12 eingegeben hab,
                               // ist nun input 12 aber *A "null" - warum???
    		input=0;
    	}
    	catch(...)
    	{
    		cout << "Fehler bei 1 !";
    	}
    ...
    

    Ach ja und dann hab ich noch ne 2. Frage, wenn ich einen int-Zeiger wie oben zB *A hab, wie kann ich mit cin einen Wert einlesen, so dass ich mit ENTER bestätigen kann?

    Danke



  • A ist ein Zeiger auf ein int und sollte daher vor Verwendung initialisiert werden:

    int* A = new int;
    *A = 1;
    

    Und dass Du mit try und catch hier nicht glücklich werden wirst weißt Du hoffentlich auch, oder? (Vermutlich wirfst Du irgendwo ohnehin eine Ausnahme, aber man kann ja nie wissen... 😉 )



  • Also ich galube

    int *A = 1;
    geht nicht´, denn dann lässt du den Zeiger auf die Adresse 0x00000001 zeigen, das willst du bestimmt nicht.
    Du muss den Zeiger entweder mit ner anderen Variablen initialisieren oder du mit new Speicher anfordern:

    int Var = 3;
    int* a = Var; // A zeigt auf Wert 3
    oder int *b = new int(3) // hier genauso

    b musst dua ber wieder löschen:
    delete b; sonst gibt es Speicherlecks, und gibts davon zu viele, must du Neustarten, und das wollen wir ja nicht 🙂



  • Maxi2 schrieb:

    int Var = 3;
    int* a = Var; // A zeigt auf Wert 3
    oder int *b = new int(3) // hier genauso

    Also die zweite Zeile ist Blödsinn, das muss wenn dann so heißen:

    int* a = &Var;
    

    da Du ja einem Zeiger nicht einen Wert sondern höchstens eine Adresse zuweisen kannst.

    Wenn Du dem Zeiger den Wert einer Variablen zuweisen möchtest dann kannst Du das zB so machen:

    int* a = new int(Var);
    


  • Danke, ich hab mir verwirren lassen, mit

    int*A=0;
    

    da ich hier dachte, dass ich *A (also den Wert) und nicht A (die Adresse) initialisieren würde, da mir schon klar ist dass man keine Adresse zuweisen kann (und darf!), aber mit 0 ist das ja ne Ausnahme und es ist der Typ int* und A gemeint und nicht int und *A 😉

    PS: die "try und catch alles" hab ich nur reingemacht, da mir das Programm zwar kompiliert wurde, aber bei der Ausführung natürlich mein Computer immer erst mit Hilfe eines Ausnahmefensters seine Verschwinde-Zaubertricks präsentiert hat. damit ich aber sehen kann ob denn im weiteren Verlauf noch irgendwelche Probs auftreten, hab ich mehrere try/catch(...) eingebaut und jeweils die Fehlerstellen nummeriert, so seh ich an der Ausgabe, dass das zwar kompiliert aber nicht richtig ausgeführt wurde.



  • Was den zweiten Punkt betrifft: Dafür solltest Du besser Deinen Debugger verwenden, setze einfach ein paar Haltepunkte, damit ist sowas viel bequemer!



  • @nman: kalr ich meinte ja &Var, is ja logisch.



  • ...ich kenn mich mit dem Compiler mit dem ich da gearbeitet hab nich so aus, und daher hab ich das mit den try/catch gemacht, warum is das schlecht, es geht doch eh nur um Code austesten??? (Quasi Trash-Code)



  • Weil Du dafür eigentlich überhaupt keinen Code brauchst, normalerweise kann man solche Sachen mit Profiler noch um einiges komfortabler lösen (oder mit ein paar asserts und dergleichen).

    Was für eine Entwicklungsumgebung benutzt Du denn?


Log in to reply