Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Allgemeines zum Magazin ::  [Suchen Autor für:] Bugs bei denen man lange sitzt  
Gehen Sie zu Seite 1, 2, 3, 4  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Ben04
Autor

Benutzerprofil
Anmeldungsdatum: 10.10.2004
Beiträge: 1635
Beitrag Ben04 Autor 23:17:38 09.06.2007   Titel:   [Suchen Autor für:] Bugs bei denen man lange sitzt            Zitieren

Wie wäre es mit einem Artikel bezüglich eher ungewöhnlichen Bugs bei denen man lange sitzt ehe man sie gefunden hat. Also so eine Art Auflistung.

Ich hätte vier Kandidaten:

  • Selbstinitialisierung
    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;
    };
    C/C++ Code:
    class Car{
    public:
      Car(const std::string&brant_name):
        brand_name(brand_name){}
    private:
      std::string brand_name;
    };

  • Parameter deckt Member
    C/C++ Code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Car{
    public:
      Car(std::string brand_name):
        brand_name("Audi"){
        brand_name = "VW";
      }
    private:
      std::string brand_name;
    };
    C/C++ Code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Car{
    public:
    Car(std::string brand_name):
    brand_name("Audi"){
    brand_name = "VW";
    }
    private:
    std::string brand_name;
    };
    C/C++ Code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Car{
    public:
      Car(std::string brand_name):
        brand_name("Audi"){
        brand_name = "VW";
      }
    private:
      std::string brand_name;
    };

  • Ändern der Interna der Basisklasse bricht abgeleitete Klasse

    Dies funktioniert
    C/C++ Code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int foo;

    class Base{
    private:
      int bar;
    };

    class Derived:public Base{
    public:
      void my_func(){
        foo = 4;
      }
    };
    C/C++ Code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int foo;

    class Base{
    private:
    int bar;
    };

    class Derived:public Base{
    public:
    void my_func(){
    foo = 4;
    }
    };
    C/C++ Code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int foo;

    class Base{
    private:
      int bar;
    };

    class Derived:public Base{
    public:
      void my_func(){
        foo = 4;
      }
    };

    So nun wird Base geändert und es geht nicht mehr:
    C/C++ Code:
    class Base{
    private:
      int foo;
    };
    C/C++ Code:
    class Base{
    private:
    int foo;
    };
    C/C++ Code:
    class Base{
    private:
      int foo;
    };

    (Ist kein Compiler-Bug sondern ein Standard-Bug)
  • Unterschied foo, this->foo in Templateklassen
    http://www.parashift.com/c++-faq-lite/templates.html#faq-35.19


Wer noch Kandidaten hat kann sie ja einfach mal nennen. Vielleicht macht ja irgendwer mal ein Artikel draus.


Zuletzt bearbeitet von estartu am 14:34:56 14.01.2008, insgesamt 2-mal bearbeitet
estartu
Moderator

Benutzerprofil
Anmeldungsdatum: 05.09.2003
Beiträge: 11494
Beitrag estartu Moderator 13:24:32 13.06.2007   Titel:              Zitieren

Sieht nett aus. :)

_________________
Das c-plusplus.de-Magazin sucht Mitmacher --- Die Artikel --- meine Homepage
chrische5
Mitglied

Benutzerprofil
Anmeldungsdatum: 23.05.2005
Beiträge: 5014
Beitrag chrische5 Mitglied 16:59:06 13.06.2007   Titel:              Zitieren

Hallo

Reihenfolge in der Initialisierungsliste ist auch ein guter Kanidat.

chrische

_________________
"Mach mal einem Bekloppten klar, dass er bekloppt ist." Dieter Bohlen
LordJaxom
Mitglied

Benutzerprofil
Anmeldungsdatum: 23.11.2005
Beiträge: 5550
Beitrag LordJaxom Mitglied 17:11:59 13.06.2007   Titel:              Zitieren

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

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
void func( char* buffer, size_t length ) {
    buffer[ length ] = '\0';
    strcpy( somewhere, buffer );
}

void use() {
    char buffer[ 2000 ];
    char hostname[ 256 ];

    strcpy( hostname, "My_Pc" );
    func( buffer, sizeof( buffer ) ); // wenn die stack-ausrichtung stimmt ist hostname jetzt leer
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
void func( char* buffer, size_t length ) {
buffer[ length ] = '\0';
strcpy( somewhere, buffer );
}

void use() {
char buffer[ 2000 ];
char hostname[ 256 ];

strcpy( hostname, "My_Pc" );
func( buffer, sizeof( buffer ) ); // wenn die stack-ausrichtung stimmt ist hostname jetzt leer
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
void func( char* buffer, size_t length ) {
    buffer[ length ] = '\0';
    strcpy( somewhere, buffer );
}

void use() {
    char buffer[ 2000 ];
    char hostname[ 256 ];

    strcpy( hostname, "My_Pc" );
    func( buffer, sizeof( buffer ) ); // wenn die stack-ausrichtung stimmt ist hostname jetzt leer
}


Zuletzt bearbeitet von LordJaxom am 17:12:35 13.06.2007, insgesamt 1-mal bearbeitet
rüdiger
Moderator

Benutzerprofil
Anmeldungsdatum: 11.07.2001
Beiträge: 22819
Beitrag rüdiger Moderator 03:06:35 14.06.2007   Titel:   Re: [Vorschlag] Bugs bei denen man lange sitzt            Zitieren

Ben04 schrieb:


  • Selbstinitialisierung
    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;
    };
    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.

_________________
.
Jester
Moderator

Benutzerprofil
Anmeldungsdatum: 06.04.2001
Beiträge: 8331
Beitrag Jester Moderator 09:35:47 14.06.2007   Titel:              Zitieren

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.
Artchi
Autor

Benutzerprofil
Anmeldungsdatum: 16.03.2002
Beiträge: 8576
Beitrag Artchi Autor 10:30:19 14.06.2007   Titel:              Zitieren

Kann überhaupt ein einziger Autor solch eine Liste aufschreiben? Man, der muß ja echt Probleme gehabt haben. :D ;)

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.

_________________
Bring back the Windows Start Menu Petition | GoPetition


Zuletzt bearbeitet von Artchi am 10:32:16 14.06.2007, insgesamt 1-mal bearbeitet
Jester
Moderator

Benutzerprofil
Anmeldungsdatum: 06.04.2001
Beiträge: 8331
Beitrag Jester Moderator 10:50:23 14.06.2007   Titel:              Zitieren

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!


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.
pale dog
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.04.2007
Beiträge: 1258
Beitrag pale dog Mitglied 10:54:41 14.06.2007   Titel:              Zitieren

Artchi schrieb:

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. :D
edit: zu laaahhhhm :(

topic: am schlimmsten finde ich bugs, die man nicht selber fabriziert hat, z.b. falsch funktionierende library-funktionen und dergleichen...
:)

_________________
http://users.aol.com/s6sj7gt/mike666.htm


Zuletzt bearbeitet von pale dog am 10:55:35 14.06.2007, insgesamt 1-mal bearbeitet
estartu
Moderator

Benutzerprofil
Anmeldungsdatum: 05.09.2003
Beiträge: 11494
Beitrag estartu Moderator 13:15:11 14.06.2007   Titel:              Zitieren

Ich werde immer mal wiede rausgelacht, weil ich IMMER Klammern setze.
Ich habe grundsätzlich zu viele Klammern... egal ob () oder {}

Allerdings ist mir sowas lieber als die Sucherei, warum das immer Meldung macht und nicht nur, wenn x, was es soll:
C/C++ Code:
if (x == 3)
    tuwas();
    MachMeldung();
tuwasanderes();
C/C++ Code:
if (x == 3)
tuwas();
MachMeldung();
tuwasanderes();
C/C++ Code:
if (x == 3)
    tuwas();
    MachMeldung();
tuwasanderes();


Und: Schöner Fehler, den ich grade aus Versehen drin hatte:
C/C++ Code:
if (x = 3)
    tuwas();
    MachMeldung();
tuwasanderes();
C/C++ Code:
if (x = 3)
tuwas();
MachMeldung();
tuwasanderes();
C/C++ Code:
if (x = 3)
    tuwas();
    MachMeldung();
tuwasanderes();


...für runde Klammern fällt mir grade nix ein...

_________________
Das c-plusplus.de-Magazin sucht Mitmacher --- Die Artikel --- meine Homepage
C/C++ Forum :: Allgemeines zum Magazin ::  [Suchen Autor für:] Bugs bei denen man lange sitzt  
Gehen Sie zu Seite 1, 2, 3, 4  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

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.