Le bêtisier du code source

GrandGibus

Membre expert
Club iGen
8 Mars 2004
1 262
103
50
Bordeaux
homepage.mac.com
J'ouvre ici un sujet sur les perles dans le code source. Le but est de retranscrire de manière concise un exemple de code source "stupide" de votre cru ou que vous avez pu lire.

Le langage et la syntaxe ont peu d'importance, soyez le plus clair possible, afin que le maximum d'entre-nous comprenne.

Je commence:
Bloc de code:
    for (int i=0; i<MAX; i++) {
        switch (i) {
            case 0: .... break;
            case 1: .... break;
            case 2: .... break;
            ...
        }
    }


P.S. c juste histoire de d&#233;tendre un peu l'atmosph&#232;re qui r&#232;gne en ce moment... peut-&#234;tre ce sujet aurait-il &#233;t&#233; plus appropri&#233; au Bar, mais c'est bien connu: l'humour d'informaticien... ;)


P.S. 2: c'est interdit de faire du copier/coller des extraits de code &#224; Tatouille :rateau: :D :love:
 
  • J’aime
Réactions: l'écrieur et p4bl0
Si je retrouve les codes javascripts de certains amis que j'ai du corriger pour les aider, j'ai de quoi remplir dix pages de topic...

Mais ce sont des erreurs de d&#233;butant, c'est du coup beaucoup moins dr&#244;le...

Mais un bout de code qui m'a beaucoup fait rire lors d'une correction, c'est celui-ci (en javascript):

Bloc de code:
function verifConfirm(param) {
   if (param == true) {
      return true;
   } 
}

Et il l'utilisait tout le temps dans son code, avec des structures genre:

Bloc de code:
if( verifParam(maVariable) == true ) {
   [actions]
}

Le pire, c'est qu'il m'a fallu des heures pour lui faire comprendre son "erreur"...
 
  • J’aime
Réactions: Bilbo
Il m'est arriv&#233; de rester longtemps, incr&#233;dule, devant des bouts de code r&#233;calcitrants qui contenaient des erreurs de frappe (parfois du fait d'un copier-coller malheureux), du style :
Bloc de code:
for (i=0.0; i<1,5; i+=0.01)
{
   ...
}
( "1,5" au lieu de "1.5" )

ou encore :
Bloc de code:
while (condition);
{
   ...
}
( ";" en trop )
 
Un fois, un stagiaire m'avait pondu une fonction comme celle-ci :
Bloc de code:
void LibereListeChainee(ITEM *pItem)
{
   // variables locales
   ...

   if (pItem)
   {
      // lib&#233;ration de l'item suivant
      LibereListeChainee (pItem->pNext);

      // lib&#233;ration de l'item courant
      ... 
      free(pItem);
   }
}
La lib&#233;ration de la liste cha&#238;n&#233;e n&#233;cessitait autant de place sur la pile que l'espace occup&#233; par la liste elle-m&#234;me (plusieurs Mo). De ce fait, on atteignait rapidement l'overflow.

De plus, c'&#233;tait sous Windows, et les temps de lib&#233;ration devenaient exorbitants. Une liste allou&#233; en deux secondes sur la pile mettait pr&#232;s de cinq minutes &#224; se lib&#233;rer.

&#199;a marchait pourtant... sur le papier ! :D
 
Tout un programme en Java (langage Objet par excellence), voici le genre de code type:

Bloc de code:
public UnObjet {
    public static Object[] les_champs;
}

public UneCollection {
    public static Object[][] une_liste_dobjets;
}

Heuresement, il y avait une classe "dictionnaire":
Bloc de code:
public LeDico {
    public statc int UnObjetChamp1 = 0;
    public statc int UnObjetChamp2 = 1;
../..
}


On avait (re)baptisé le paradigme de ce logiciel: "Access everything from anywhere" :D
 
Bonjour,

Sujet interessant. Il y a quelque temps j'ai port&#233; un soft Mac sur Windows (Reamlz). Le code &#233;tait truff&#233; d'acces du genre :

short a,b;

void fonction(void)
{
short *p;
short valSupposeeDeA,valSupposeeDeB;

p=&a;
valSupposeeDeA=*(p++);
valSupposeeDeA=*(p++);

}

Bien, sur, plantus assur&#233;, rien ne garantie la succession des donn&#233;es dans le BSS.

Cordialement
 
On avait (re)baptisé le paradigme de ce logiciel: "Access everything from anywhere" :D

pour pascal ca aurait pu etre rideau de suite

il m'est arrivé :D de pas relacher dans un kmod :rateau:
:p:D et on en sortait jamais :D donc ça ds un kernel space
:D bouf load broumbroum ca grossi ca grossi paf rideau
:D:cool::D
 
tatouille a dit:
On avait (re)baptisé le paradigme de ce logiciel: "Access everything from anywhere" :D

pour pascal ca aurait pu etre rideau de suite

il m'est arrivé :D de pas relacher dans un kmod :rateau:
:p:D et on en sortait jamais :D donc ça ds un kernel space
:D bouf load broumbroum ca grossi ca grossi paf rideau
:D:cool::D


Euh ? Tu peut décoder ?

Cordialement
 
Didier Guillion a dit:
Euh ? Tu peut d&#233;coder ?

Cordialement
je vais essayer :
On avait (re)baptis&#233; le paradigme de ce logiciel: "Access everything from anywhere" :D
-> &#231;a &#231;a veux dire que &#231;a l'a fait rire


il m'est arriv&#233; :D de pas relacher dans un kmod :rateau:
-> apparemment (je m'y connais pas assez, mais &#231;a commence par k) un truc en rapport avec le noyeau

:p:D et on en sortait jamais :D donc &#231;a ds un kernel space
-> Apparemment l&#224; il dit que c'&#233;tait de pire en pire

:D bouf load broumbroum ca grossi ca grossi paf rideau
:D:cool::D

-> La le syst&#232;me &#224; lach&#233;...


P.S.: c'est encore une version b&#234;ta du traducteur :p
 
bah oui rideau bouffe toute la m&#233;moire

j'en ai une belle mais pas de moi :D:D:D
en ce moment sur le nouveau site opensource effort d'Apple

Fatal error: out of dynamic memory in yy_create_buffer() in Unknown on line 0

http://www.macosforge.org/

je ne sais pas qui bidouille du sql foireux mais :up::up::up::up::up::D
 
truk2oof a dit:
je vais essayer :
On avait (re)baptisé le paradigme de ce logiciel: "Access everything from anywhere" :D
-> ça ça veux dire que ça l'a fait rire


il m'est arrivé :D de pas relacher dans un kmod :rateau:
-> apparemment (je m'y connais pas assez, mais ça commence par k) un truc en rapport avec le noyeau

:p:D et on en sortait jamais :D donc ça ds un kernel space
-> Apparemment là il dit que c'était de pire en pire

:D bouf load broumbroum ca grossi ca grossi paf rideau
:D:cool::D

-> La le système à laché...


P.S.: c'est encore une version bêta du traducteur :p


Désolé, pour moi c'est du broussouf. Dommage, c'était un fil interessant.

Cordialement
 
J'ai ai aussi eu une bonne, de la part du m&#234;me stagiaire dont je parlais au post #7.

Dans un outil de simulation, on remplissait une liste de r&#233;sultats de la mani&#232;re suivante:
Bloc de code:
void RemplissageListe(ITEM *debutListe)
{
   ITEM *pListe = debutListe;

   do {
      pListe->data = Calcul();  // remplit l'item avec les donn&#233;es calcul&#233;es
      pListe = pListe->suivant; // passe au suivant 
   } while ( pList!=NULL );

}

DATAITEM *Calcul()
{
   DATAITEM data;

   // calcule les donn&#233;es et les place dans data
   ...

   return &data; // retourne l'adresse de la structure locale !!!   
}
Comme vous le voyez, &data retourne toujours l'adresse de la structure DATAITEM pr&#233;sente sur la pile, et de surcro&#238;t lib&#233;r&#233;e &#224; la sortie de la fonction Calcul().

Au final, toute la liste de r&#233;sultats contenait (&#224; la relecture) des valeurs souvent identiques, car correspondant au dernier calcul effectu&#233;, parfois alt&#233;r&#233; par un remplissage inopin&#233; et important de la pile (&#224; l'occasion d'une interruption mat&#233;rielle, par exemple).

Le programme a tourn&#233; plusieurs semaines sans qu'on ne s'aper&#231;oive de rien, car les r&#233;sultats de la simulations &#233;taient assez plausibles. Seule une analyse plus fine lors des tests finaux a d&#233;montr&#233; le probl&#232;me. Et il m'a quand m&#234;me fallu un peu de temps pour retrouver cette &#226;nerie au beau milieu de plusieurs dizaines de milliers de lignes de code.

Il faut dire, on n'a pas id&#233;e... :rolleyes: hein ?
 
  • J’aime
Réactions: GrandGibus
J'en ai vu passer une de chez Microsoft, que vous pouvez retrouver sur cette page Web.

Voici un morceau de code source de Microsoft Office Visual Basic :
Bloc de code:
//  Function:   RunCommandEx
//  Synopsis:   runs the given command in the current session, more robust
// than RunCommand
//  Arguments:  none
//  Returns:    S_OK if success
//  History:    October 3, 2000 - created [name withheld to protect the guilty]
HRESULT RunCommandEx(LPCWSTR szCmdLine) {
     DWORD dwTry = 0;
     HRESULT hResult = S_OK;

     // try run command 3 times at most
     while (dwTry<4) {
          hResult = RunCommand(szCmdLine);
          if (hResult!=E_FAIL) {
               // we succeeded
               break;
          }
          dwTry++;
     }
     if (dwTry==4) {
          ATLTRACE(L"COuld start the command even we tried 4 times\n");
          ASSERT(FALSE);
     }
     return hResult;
}
Ils r&#233;essayent trois fois, au cas o&#249; &#231;a ne marcherait pas du premier coup ! :eek:

Je vous recommande la lecture de la page web en question (et particuli&#232;rement du m&#233;mo interne destin&#233; &#224; Bill Gates). &#199;a vaut son pesant de cacahouettes ! :D :D
 
  • J’aime
Réactions: l'écrieur