Bienvenue sur PEBKAC.fr, le site qui recense les anecdotes où l’on se moque des utilisateurs ne maîtrisant pas l’outil informatique. PEBKAC est un acronyme signifiant « Problem Exists Between Keyboard And Chair ».
Le problème se situe entre la chaise et le clavier : soumettez vos histoires, donnez votre avis !
Ce site n'est pas le site original pebkac.fr. Je publie ici la liste des PEBKAC que j'ai pu sauvegarder avant que le site original ne soit mis hors ligne.
Aujourd'hui, en TD de langage C, notre professeur a écrit au tableau une fonction récursive sans cas d'arrêt.
Il a fallu une demi-heure pour lui faire comprendre que cela ne pourrait pas fonctionner. PEBKAC.
PEBKAC #6870 proposé par gilgamesh le 05/02/2013 | 19 commentaires | 👍🏽 👎🏽 +198
C'est pour chauffer la machine, et le cas d'arrêt est "Ctrl+C".
Commentaire #77545 écrit par juu le 05/02/2013 à 09h21 | 👍🏽 👎🏽
Ah, ça dépend ! Si la fonction s'appelait "void neRienFaireEtBoufferDesCyclesCPU()", elle fonctionnait sans doute parfaitement.
Commentaire #77548 écrit par Tailszefox le 05/02/2013 à 09h30 | 👍🏽 👎🏽
Pour comprendre la récursivité, il faut d'abord comprendre la récursivité...
Commentaire #77550 écrit par pTree le 05/02/2013 à 09h42 | 👍🏽 👎🏽
Ça fait 142 fois que je relis ta phrase, j'ai toujours pas compris!

C'est comme quand j'ai essayé de comprendre ce que voulait dire WINE.
Commentaire #77551 écrit par Link le 05/02/2013 à 09h46 | 👍🏽 👎🏽
Une bonne chose quand on écrit une fonction récursive (à part ne pas faire de récursivité) est de commencer par la condition d'arrêt, comme ça on ne risque pas de l'oublier.
Commentaire #77552 écrit par Acorah le 05/02/2013 à 10h00 | 👍🏽 👎🏽
comme pour les pneu, il ne faut pas attaquer les courbes avec des pneus froid.
Commentaire #77555 écrit par but2ene le 05/02/2013 à 10h38 | 👍🏽 👎🏽
Pas pour trés longtemps. On n'empile pas indefiniment sans un bon stack overflow.
Commentaire #77556 écrit par but2ene le 05/02/2013 à 10h40 | 👍🏽 👎🏽
Peux tu développer ou itérer ? XD
Commentaire #77557 écrit par but2ene le 05/02/2013 à 10h42 | 👍🏽 👎🏽
j'ai le même soucis avec GNU...
Commentaire #77562 écrit par Vinceg76 le 05/02/2013 à 11h11 | 👍🏽 👎🏽
il y a HURD aussi, et là c'est encore plus vicieux : double récursivité!
Commentaire #77564 écrit par ROB le 05/02/2013 à 11h26 | 👍🏽 👎🏽
@ROB : Tout le monde ne peut pas se payer ce luxe
Commentaire #77629 écrit par Mat+1 le 05/02/2013 à 15h11 | 👍🏽 👎🏽
Bof, ca s'arrête vite un stack overflow... En C, il est tellement plus drôle d'utiliser fork() dans une boucle infinie et sans contôle du pid (histoire de faire de l'exponentiel...)
Commentaire #77630 écrit par Mat+1 le 05/02/2013 à 15h13 | 👍🏽 👎🏽
@Mat+1 : Tout le monde ne peut pas se payer HURD ⸮
Commentaire #77648 écrit par 1138 le 05/02/2013 à 16h09 | 👍🏽 👎🏽
:(){ :|:& };:

Quoi ? Un joli smiley à mettre dans un terminal !
Commentaire #77687 écrit par X3N le 05/02/2013 à 18h02 | 👍🏽 👎🏽
En fait, c'est le plantage le cas d'arrêt.

Bon, ben je vais me remettre au GOTO++.
Commentaire #77708 écrit par Moi le 05/02/2013 à 19h28 | 👍🏽 👎🏽
Bénie soit la culture geek pour me protéger contre de tels enfoirés :p
Commentaire #77738 écrit par mini le 05/02/2013 à 20h44 | 👍🏽 👎🏽
Quand j'étais étudiant, un camarade a eu une idée sympathique : bourrer à la fois le CPU et l'ordonnanceur, avec les fork(), et la RAM...
de mémoire :
fork();
if(pere){
for(;;){
malloc(1024);
fork();
}
}else{
fork();
}

Je n'ai pas fait de tests rigoureux pour regarder ce qui allait le plus vite entre la version simple et la version élaborée, mais je me souviens que celui-ci était complètement impossible à bloquer, pas le temps de dire "je le lance pour rire et je fais Ctrl+C tout de suite", la machine rame mortellement, et est irrécupérable en moins de 3 secondes (sur les machines de TP de la fac)...
Pratique pour faire fuir les gens qui squattent la salle et font chier le monde (discussions bruyantes, jeu,...)

Et sinon, un code encore plus simple, en shell, un bidule du genre
$0 & $0 après le shebang doit être suffisant...
Commentaire #77745 écrit par Alibi le 05/02/2013 à 21h10 | 👍🏽 👎🏽
pourquoi tant de raffinement ?

printf("BOOM !");
while(1) {
malloc(4096); // Une page, c'est gentil
fork();
}
Commentaire #77815 écrit par Mat+1 le 06/02/2013 à 11h32 | 👍🏽 👎🏽
Bénie soit /etc/security/limits.conf, je l'ai lancé juste pour le fun du coup.
Commentaire #77883 écrit par MilkEnd le 06/02/2013 à 14h38 | 👍🏽 👎🏽