Floating Point Exception

Fermé
Utilisateur anonyme - 6 juil. 2015 à 09:01
VanDog Messages postés 63 Date d'inscription vendredi 17 juillet 2015 Statut Membre Dernière intervention 11 février 2016 - 18 juil. 2015 à 00:27
Bonjour,
Je suis en train de faire un mini-jeu et j'ai besoin de mélanger des lettres.
Malheuresement la fonction qui les mélange fait à chaque fois planter mon programme à coups de floating point exception. Voici le code de ma fonction :
#include <iostream>
#include <string>
#include "melange.h"
#include <ctime>
#include <cstdlib>


using namespace std;

string melange(string motDepart)
{

    int nbAleatoire1(2);
    int nbAleatoire2;
    char lettreCopie;
    string motMelange;
    do
    {
    motDepart = motMelange;
    nbAleatoire1 = rand() % motDepart.size();
    lettreCopie = motDepart[nbAleatoire1]; //On prend une lettre au hasard ds lettreCopie
    nbAleatoire2 = rand() % motMelange.size();    //On prend un chiffre au hasard
    motMelange[nbAleatoire2] = lettreCopie;      //On y met la lettre ds le mot
    motDepart.erase(nbAleatoire1, 1);
    }while(motDepart.size() > 0);
    return motMelange;
}


Merci à ceux qui m'aideront !

1 réponse

VanDog Messages postés 63 Date d'inscription vendredi 17 juillet 2015 Statut Membre Dernière intervention 11 février 2016 13
Modifié par Whismeril le 7/08/2015 à 23:17
Bien le bonjour,

Ta fonction melange est supposée prendre un string motDepart en argument et renvoyer une copie de celle-ci mélangée.

Tu initialises motMelange tel que:
 string motMelange;
qui est alors un string vide.

Le soucis arrive à l'entrée de ton do / while avec :
    do
{
motDepart = motMelange;


A ce moment tu détruis ton motDepart en remplaçant sa valeur par un string vide.
La FPE arrive alors au moment du
nbAleatoire1 = rand() % motDepart.size();
où tu fais un
modulo 0
.

La FPE arrive souvent avec les opérations impossibles (division par 0 étant la grande faucheuse).
Tu as frolé la Seg'Fault ^^


Edit suppression de la signature contraire à la charte
0