Uverständliche Ausgabe des Compilers

Verschiedenes zu Qt
Antworten
Pauer
Beiträge: 9
Registriert: 7. Juli 2013 22:25

Uverständliche Ausgabe des Compilers

Beitrag von Pauer »

Hallo zusammen,

ich bin gerade dabei, qt zu lernen. Dabei benutze ich ein Buch, welches den Mangel hat, dass es bei der Wiederholung von c++ teilweise keine Lösungen angibt.
Da liegt auch das Problem. Ich habe eine Aufgabe, bei welcher ich die Ausgabe des Programms nachvollziehen bzw. erklären soll. Die Ausgabe ist mir größtenteils klar, nur die letzten 2 Zeilen bereiten mir Probleme.

Zunächst das Programm:

Code: Alles auswählen

#include <QTextStream>

int main() {
QTextStream cout(stdout);
    const char tab = '\t';
    int n = 13;
    int* ip = new int(n + 3);
    double d = 3.14;
    double* dp = new double(d + 2.3);
    char c = 'K';
    char* cp = new char(c + 5);
    cout << *ip << tab << *dp << tab << *cp << endl;
    int* ip2 = ip;
    cout << ip << tab << ip2 << endl;
    *ip2 += 6;
    cout << *ip << endl;
    delete ip;
    cout << *ip2 << endl;
    cout << ip << tab << ip2 << endl;
    return 0;
Dabei ist mir Zeile nach dem delete ip nicht klar. Bei jeglichen Versuchen kommt da bei mir 36 raus und ich komm nicht darauf, warum das so ist. Ich habe versucht alle möglichen Variablen zu ändern, um ein anderes Ergebnis zu bekommen, ohne Erfolg.
Hat vielleicht jemand einen Tip?
Für die Hoilfe schon mal vielen Dank.

Gruß
Patrick
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Uverständliche Ausgabe des Compilers

Beitrag von Christian81 »

Du greifst auf uninitialisierten Speicher zu und wunderst dich dass da Müll drin steht? C++ Grundlagen denn nur weil da QTextStream anstatt std::cout benutzt wird hat das nix mit Qt zu tun :)
Was soll der Code überhaupt? Nur ein Testcase oder was zum Üben?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Re: Uverständliche Ausgabe des Compilers

Beitrag von Hulk2442 »

Code: Alles auswählen

int* ip2 = ip;
cout << ip << tab << ip2 << endl;
„ip2“ als auch „ip“ zeigen auf den gleich Speicher

Code: Alles auswählen

*ip2 += 6;
cout << *ip << endl;
„ip2“ als auch „ip“ werden um den Wert 6 vergrössert

Code: Alles auswählen

delete ip;
cout << *ip2 << endl;
cout << ip << tab << ip2 << endl;
Da beide Pointer auf den gleichen Speicher zugreifen wird beim löschen eines Pointers auch das Ergebnis des Anderen gelöst.
Somit zeigt ip2 (da er noch existiert) auf einen Speicher welcher nicht mehr existiert = PROBLEM

btw.:
Was meinst du mit 36?
Das ist die Ausgabe deines Programms (tabs werden hier online falsch dargestellt)
16 5.44 P
0x22f4850 0x22f4850
22
0
0x22f4850 0x22f4850
Antworten