http://www.pronix.de -> Bücher -> Bücher aus meiner Feder -> C++ von A bis Z -> Errata

Errata

Hier werden Fehler des Buches "C++ von A bis Z" der 2. Auflage gesammelt. Die Fehler aus der 1.Auflage, die in der 2.Auflage behoben wurden, finden Sie hier wieder. Sollten Sie im Buch der aktuellen 2.Auflage einen Fehler entdecken, so können Sie mir diesen gerne über das Kontaktformular oder im Forum melden.


  • Im Kapitel 2 bei den Abbildungen 2.4, 2.5, 2.6, 2.7 und 2.8 habe ich die hexadezimalen Werte der Speicherbereiche falsch hochgezählt. Hier fehlt die Adresse 0010. Zwar sind diese Speicherbereiche im Buch nur rein theoretisch für die Abbildungen gedacht, aber eben trotzdem nicht korrekt. Es sollte also lauten: 0000, 0004, 0008, 000C, 0010, 0014, 0018, ... (vielen Dank an C. Fiedler für den Hinweis).
  • Seite 194 im Listing returnref.cpp steht in der Zeile 8 "int* ptr". Hier fehlt das "i" und soll natürlich "int* iptr" heißen (vielen Dank an P. Wisniewski für den Hinweis).
  • Seite 177 (Der Abschnitt nach dem Hinweis-Block): "Wer als C-Programmierer denkt, es gibt in C eine realloc()-Alternative [...]" Es sollte heißen: "Wer als C-Programmierer denkt, es gibt in C++ eine realloc()-Alternative [...]" (also in C++, nicht in C).(vielen Dank an M. Brodbeck für den Hinweis).
  • In Kapitel2, Listing zu den verketteten Listen (list.cpp; Seite 214): Das kompilierte Listing zeigt ein fehlerhaftes Verhalten: Wenn die Liste nur ein Element enthält und dieses gelöscht wird, so wird es nach dem Löschen immer noch angezeigt, und der Versuch ein neues Element einzufügen führt zu einer (Endlos?)-Schleife. Der Fehler liegt in der Funktion deleteKnoten(), wenn die Abfrage if(Anfang->next != 0) zutrifft. Ohne diese Abfrage tritt der Fehler nicht auf (Vielen Dank für den Hinweis an W. Meyer). Hierzu die Funktion deleteKnoten() korrekt:
  • // Das erste Element mit dem Wert dat aus der Liste löschen
    Knoten* deleteKnoten( int dat ) {
    if( Anfang == 0 ) {
    cout << "Die Liste ist leer\n";
    // Wenn die Liste leer ist, gibt es nichts mehr zu tun
    // daher raus aus der Funktion -> hinzufügen
    return Anfang;
    }
    // Ist das erste Element, dass von uns gesuchte?
    if( Anfang->daten == dat ) {
    Knoten* del = Anfang;
    // Bei einer Liste mit nur einem Element führt diese
    // Zeile zum Fehlverhalten -> daher auskommentiert
    //if( Anfang->next != 0 )
    Anfang = Anfang->next;
    delete del;
    }
    // Die komplette Liste nach dem gesuchten Element durchlaufen
    else {
    Knoten* node = Anfang;
    while( node->next != 0 && node->next->daten != dat )
    node=node->next;
    if( node->next == 0 )
    cout << "Element zum Löschen kommt nicht in der Liste vor\n";
    else {
    // das zu löschende Element an del zuweisen
    Knoten* del = node->next;
    // Einen Hilfszeiger hinter das zu löschende Element
    Knoten* help = del->next;
    // das zu löschende Element "aushängen"
    node->next = help;
    delete del;
    }
    }
    return Anfang;
    }
  • Auf der Seite 709 in der Tabelle 7.9 steht, dass die Methode substr() aus dem aktuellen String einen Teilstring von pos bis n erzeugt. Dies ist allerdings falsch. Sie erzeugt einen Teilstring von ab pos mit n Buchstaben (oder bis zum Ende des Strings) (Vielen Dank an Hr. Heemeyer für den Fehler).