Off-by-one Fehler, die sich erst viel später auswirken. Folgendes Beispiel hatte ich sinngemäß erst vorgestern, wobei die Funktion "func" nicht von mir war und nur compiliert vorlag . Habs dann über nen Watchpoint gefunden. (Ist aber ANSIC).
class Car{
public:
Car(const std::string&brant_name):
brand_name(brand_name){}
private:
std::string brand_name;
};
C/C++ Code:
class Car{
public:
Car(const std::string&brant_name):
brand_name(brand_name){}
private:
std::string brand_name;
};
C/C++ Code:
class Car{
public:
Car(const std::string&brant_name):
brand_name(brand_name){}
private:
std::string brand_name;
};
Wo ist das Problem?
Aber im Grunde glaube ich nicht das man daraus einen guten Artikel schreiben kann und vor dem meisten warnen die Compiler ja, wenn es nicht sogar einen Fehler generiert.
Ich denke schon, dass man da insgesamt was nettes schreiben kann. Allerdings denke ich nicht, dass es genügt eine Liste von Bugs zu machen und zu sagen: "Boah, die waren alle soo schwer zu finden."
Wie bereits eindrucksvoll bestätigt (ich wollte gestern schon antworten, dachte aber ich warte noch bis sich jemand meldet, danke ) wird es immer einen geben, der so einen Bug anschaut und sagt: "Öh, der is doch voll einfach zu finden. Ist ja garkein Problem."
Vielmehr sollten in so einen Artikel dann auch Tipps/Tricks und Techniken rein, die helfen genau diese Fehler zu finden oder gleich zu vermeiden. Vieles davon kann man sehr leicht über Unit-Tests rausfinden. Bei anderen Sachen hilft vielleicht eine klare Namenskonvention. Wer beispielsweise wie ich Parameter und Member nicht gleich benennt, dem kann manches davon garnicht passieren etc.
_________________ Mod im Mathe-Forum
Die dümmsten Programmierer schreiben die dicksten Programme.
Kann überhaupt ein einziger Autor solch eine Liste aufschreiben? Man, der muß ja echt Probleme gehabt haben.
Wenn dann kann man doch nur sowas sammeln. Was ja hier in diesem Thread passiert. Und ich will mich mal anschliessen.
Ich hatte mal ein switch-case-Konstrukt. nichts spektakuläres:
C/C++ Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
1 2 3 4 5 6 7 8 9 10 11 12 13 14
switch(a)
{
case right:
rechts();
break;
case left:
links();
break;
case down:
runter();
case up:
hoch();
break;
}
C/C++ Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
switch(a)
{
case right:
rechts();
break;
case left:
links();
break;
case down:
runter();
case up:
hoch();
break;
}
C/C++ Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
switch(a)
{
case right:
rechts();
break;
case left:
links();
break;
case down:
runter();
case up:
hoch();
break;
}
Tja, und ich habe ewig gesucht, woran das Problem liegen könnte. Nur nicht im switch-case-Konstrukt! Weil ich den Fehler erst später bemerkt habe, kam ich nicht auf die Idee dort zu suchen.
Was habe ich daraus gelernt? zu jedem case überprüfe ich heute instinktiv ob ich auch ein passendes break habe. Sobald ich case schreibe, hau ich sofort ein break rein. Egal was kommt! Das break kann ich immer noch weg nehmen, wenn ich es doch nicht brauche.
Was habe ich daraus gelernt? zu jedem case überprüfe ich heute instinktiv ob ich auch ein passendes break habe. Sobald ich case schreibe, hau ich sofort ein break rein. Egal was kommt!
Genau das meine ich, sowas gehört in sonen Text auf jeden Fall mit rein.
Zitat:
Das break kann ich immer noch weg nehmen, wenn ich es doch nicht brauche.
Und dann hoffentlich nen Kommentar, damit's bei der nächsten Fehlersuche nicht von jemand anders blind reingesetzt wird "klar, dass das nicht tut, da fehlt ja 'n break".
_________________ Mod im Mathe-Forum
Die dümmsten Programmierer schreiben die dicksten Programme.
Tja, und ich habe ewig gesucht, woran das Problem liegen könnte. Nur nicht im switch-case-Konstrukt!
single-step im debugger, dann hätteste es leicht gefunden
Artchi schrieb:
Was habe ich daraus gelernt? zu jedem case überprüfe ich heute instinktiv ob ich auch ein passendes break habe. Sobald ich case schreibe, hau ich sofort ein break rein. Egal was kommt! Das break kann ich immer noch weg nehmen, wenn ich es doch nicht brauche.
ich würde aber noch einen kommentar hinschreiben,
mindestens: /* Intentionally no BREAK here */
sonst baut man später noch ein break ein, weil man meint es vergessen zu haben.
edit: zu laaahhhhm
topic: am schlimmsten finde ich bugs, die man nicht selber fabriziert hat, z.b. falsch funktionierende library-funktionen und dergleichen...
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.