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 :

std out of range dans un parcours de vector en c++


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 1
    Points : 1
    Points
    1
    Par défaut std out of range dans un parcours de vector en c++
    Bonjour,

    Je travaille depuis quelque temps sur un projet en c++, j'arrive en général à résoudre mes erreurs mais là je suis vraiment bloqué.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    File* SpeedHandler::findFile(int nodeFrom)
    {
    	File* file = NULL;
    	for (auto i = 0; i < m_lFiles->size(); i++) {
    		if (m_lFiles->at(i).getNodeFrom() == nodeFrom) {
    			file = &m_lFiles->at(i);
    			break;
    		}
    	}
    	return file;
    }
    File* est l'une de mes classes ainsi que SpeedHandler, et m_lFiles est un vector. Je travaille avec Visual Studio qui me relève une erreur de type std_out_of_range.

    Si quelqu'un a une idée d'où pourrait venir le problème...

  2. #2
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 464
    Points : 4 644
    Points
    4 644
    Par défaut
    Bonjour,

    Peut être que remplacer file = &m_lFiles->at(i); par file = &(m_lFiles->at(i)); améliorerait la situation ?

    Salutations

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut, et bienvenue sur le forum

    Déjà, tu ne devrais pas utiliser la fonction membre at() de vector, car c'est une monstruosité conceptionnelle : elle lance une exception alors que nous avons affaire à une erreur de logique de la part du développeur, et qu'une assertion serait largement préférable

    Ensuite, en C++, nous utiliserons de préférence nullptr au lieu de NULL.

    En outre, je sais que bon nombre de mes confrères ne sont pas d'accord sur ce point, mais un break au milieu d'une boucle, cela ne a jamais inspiré confiance, car je trouve que cela fait "quick fix" : on se rend compte "après coup" que l'on a oublié de prendre une condition en compte pour la sortie de la boucle.

    C'est d'autant plus vrai que tu pourrais facilement le remplacer par l'instruction return file;, ou par une boucle while(i < m_file.size() && file ==nullptr), et que ces deux possibilités fourniraient le même résultat au final

    Enfin, tu pourrais assez facilement remplacer ta boucle par une boucle basée sur les intervalles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    File* SpeedHandler::findFile(int nodeFrom)
    {
        for(File & file : m_lFiles){
            if(file.getNodeFrom() == nodeFrom)
               return &file;
        }
        return nullptr;
    }
    C'est plus concis, et cela évite pas mal d'erreur

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/08/2018, 22h37
  2. Erreur subscript out of range dans un tableau
    Par lola06 dans le forum AIX
    Réponses: 1
    Dernier message: 04/09/2013, 11h43
  3. Out-of-range value que dans une clause WHERE
    Par Marc_27 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/07/2012, 15h57
  4. [List out of range] Test dans le démineur
    Par mcalus dans le forum Général Python
    Réponses: 11
    Dernier message: 25/01/2009, 01h04
  5. datetime data type resulted in an out-of-range
    Par faamugol dans le forum ASP
    Réponses: 2
    Dernier message: 26/05/2004, 20h51

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