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).
|