Ordre dans les déclarations de variables ??!

Résolu
vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006 - 3 juin 2006 à 11:16
vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006 - 3 juin 2006 à 13:00
    Bonjour à tous, je suis en train de faire un programme en C++ avec devC++, et je viens de trouver un bug que je n'arrive pas à comprendre, je veux stocker dans un tableau (appelé ligne) des chaines de caractères que je lis dans un fichier, voici le programme (simplifié) :

int main(int argc, char *argv[]){
    char* chaine;                                    
    char** ligne;                              
    ligne=new char*[2];

    ifstream fichier("a.txt");                   
        for (int i=0; i<1; i++){
            fichier >> chaine;
            ligne[i]=chaine;
        }         
    fichier.close();
    system("PAUSE");
    return EXIT_SUCCESS;
}

Et ca plante en envoyant un message d'erreur... le plus surprenant c'est que ca marche lorsque j'inverse l'ordre des déclarations : "char* chaine" et "char**ligne"... et d'autre part je suis obligé d'utiliser une variable intermédiare char* chaine car fichier>>ligne[i]; fait aussi planter le programme... C'est le genre de problème qui me désespère, help !
Merci d'avance
Vincent

4 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
3 juin 2006 à 11:26
fichier >> chaine;

Ici chaine ne pointe nulle part (pas d'espace alloué). Ca va donc écrire n'importe ou. Dans ces cas la, tu peux donc t'attendre à n'importe que résultat.
Tu devrais déclarer ligne comme un tableau à deux dimensions statique (pas besoin de new si tu connais déja la taille)
3
vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006
3 juin 2006 à 11:37
    Effectivement c'était bien ça... En fait je ne connais pas d'avance la taille de mon tableau, mais en la majorant ca fonctionne (et plus besoin de l'intermédiaire "chaine") Merci bien.
Vincent
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
3 juin 2006 à 12:55
Attention ça fuit! Pas oublier le "delete" après un "new".
0
vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006
3 juin 2006 à 13:00
    Exact :-)
0
Rejoignez-nous