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 : 25
    Localisation : France, Territoire de Belfort (Franche Comt�)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 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
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 644
    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 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
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    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
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

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