IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Crash sur une boucle et réutilisation de variable


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Crash sur une boucle et réutilisation de variable
    Bonjour,

    Pour commencer, je précise que je suis débutant en c++, donc j'ai du mal avec tout le lexique du c++ (classes, méthodes, fonctions etc...).

    Petite précision aussi, je code avec CodeBlocks 20.03 sous Win10 x64.

    Voici ce que j'ai codé:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    vector<StructSings> tabSong;
     
    int tailleTab = 0;
     
    vector<string> arraySongs;
     
    string path = "C:\\Users\\33645\\Desktop\\Formation C\\taglib2\\bin\\Musics\\";
     
    string pathSong = "";
     
    int i = 0;   
     
    arraySongs = ReadFiles();
     
    tailleTab = arraySongs.size() - 1;
     
     
     
    for(i = 1; i <= tailleTab; i++)
     
        {
     
            pathSong = path + arraySongs[i];
     
            cout << pathSong << endl;
     
            TagLib::FileRef f(pathSong.c_str());
     
            tabSong.push_back(StructSings());
     
            tabSong[i].artist = f.tag()->artist();
     
            tabSong[i].song = f.tag()->title();
     
            tabSong[i].year = f.tag()->year();
     
            tabSong[i].comment = f.tag()->comment();
     
        }

    Le programme plante à cette ligne "TagLib::FileRef f(pathSong.c_str());" quand je boucle une deuxième fois.



    je suppose que je n'ai pas le droit d'utiliser "f" une deuxième fois...

    mais du coup, je ne comprend pas comment automatiser.



    P.S: j'utilise une bibliothèque taglib qui est utilisée pour jouer avec des fichiers musicaux.

    merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Chapitre 0 : l'index des tableaux commence à 0
    Ensuite le bon sens veut qu'on déclare les variables quand on en a besoin. Ça limite entre autre d'utiliser une mauvaise valeur venue d'on ne sait où.
    Comment sais-tu que ça plante sur cette ligne ? Est-ce que le chemin est correct ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    super merci bcp

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Chapitre 0 : l'index des tableaux commence à 0
    Merci avec un i-1 le pb est résolu.

    Citation Envoyé par Bousk Voir le message
    Ensuite le bon sens veut qu'on déclare les variables quand on en a besoin. Ça limite entre autre d'utiliser une mauvaise valeur venue d'on ne sait où.
    Désolé c'est que j'ai pris qu'un morceau de mon code, je n'ai pas du voir la variable non utilisée.

    Citation Envoyé par Bousk Voir le message
    Comment sais-tu que ça plante sur cette ligne ? Est-ce que le chemin est correct ?
    Je le sais car j'affiche bien "cout << pathSong << endl;" et ensuite plus rien ne se passe.

    en tout cas merci mon pb est résolu

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Citation Envoyé par spf27 Voir le message
    Merci avec un i-1 le pb est résolu.
    En théorie, en C et en C++, on doit coder comme cela for(i=0; i < arraySongs.size(); i++): de 0 à (size - 1) avec un inférieur strict.

    Donc si ton code fonctionne avec -1 cela veut dire que que tu vas de 0 à (size - 2) - Le dernier chemin/ nom retourné par ta fonction ReadFiles() doit soit ne pas exister soit être bien moisi ?
    Et cela aussi suppose que tu n'as qu'1 chemin/ nom valide c'est pour cela que ton code "plante" au deuxième

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par foetus Voir le message
    En théorie, en C et en C++, on doit coder comme cela for(i=0; i < arraySongs.size(); i++): de 0 à (size - 1) avec un inférieur strict.

    Donc si ton code fonctionne avec -1 cela veut dire que que tu vas de 0 à (size - 2) - Le dernier chemin/ nom retourné par ta fonction ReadFiles() doit soit ne pas exister soit être bien moisi ?
    Et cela aussi suppose que tu n'as qu'1 chemin/ nom valide c'est pour cela que ton code "plante" au deuxième
    C'est vrai que j'ai crée une variable tailleTab inutile ... je pourrais utiliser arraySongs.size() - 1...

    Concernant ce que tu dis si je comprend bien tu penses que j'ai mi mon -1 ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i = 1; i <= tailleTab; i++)
    alors que j'ai mis les -1 ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tabSong[i-1].artist = f.tag()->artist();
            tabSong[i-1].song = f.tag()->title();
            tabSong[i-1].year = f.tag()->year();
            tabSong[i-1].comment = f.tag()->comment();

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Citation Envoyé par spf27 Voir le message
    C'est vrai que j'ai crée une variable tailleTab inutile
    Non cela évite de faire 1 appel à chaque boucle ... à moins que la fonction soit inline.


    Citation Envoyé par spf27 Voir le message
    j'ai mis les -1 ici
    Effectivement ton tableau tabSong commence à 0 ("0-based indexing", tout comme 1 tableau C et C++) et donc il est important de faire varier ton indice de boucle entre 0 et size() (et ainsi éviter de faire des -1 à certains endroits et pas à d'autres)

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par foetus Voir le message
    Non cela évite de faire 1 appel à chaque boucle ... à moins que la fonction soit inline.
    inline ? je n'ai pas compris ?



    Citation Envoyé par foetus Voir le message
    Effectivement ton tableau tabSong commence à 0 ("0-based indexing", tout comme 1 tableau C et C++) et donc il est important de faire varier ton indice de boucle entre 0 et size() (et ainsi éviter de faire des -1 à certains endroits et pas à d'autres)
    Oui merci, c'est évident quand tu le dis, mais à force de lire et relire le code, je n'ai pas vu le soucis xD.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Citation Envoyé par spf27 Voir le message
    inline ? je n'ai pas compris ?
    Le tuto developpez.net

    En gros c'est un mot clef (+ ou - facultatif) qui demande au compilateur de remplacer tous les appels d'1 fonction par son code (<- demande, parce qu'en fonction de la complexité de la fonction le compilateur le fait ou pas)
    Et en règle générale, les accesseurs sont inline parce qu'ils ne font juste que retourner 1 valeur.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    okay,
    en tout cas merci bcp topic résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant][Appli]Appeller une classe.
    Par Rom780 dans le forum Langage
    Réponses: 10
    Dernier message: 18/02/2006, 11h48
  2. Réponses: 4
    Dernier message: 08/11/2005, 15h10
  3. [Débutant(e)]Instancier une classe connaissant son nom (String)
    Par Invité dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 17/06/2005, 11h05
  4. [Débutant][JNDI] Erreur "bad class file"
    Par giffle dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 05/01/2005, 10h23
  5. [débutant]Documentation? boucle "while"? Session?
    Par o151181 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/01/2004, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo