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 :

Segfault sur un int?


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 25
    Points
    25
    Par défaut Segfault sur un int?
    Bonjour,

    j'ai un petit problème de seg fault à l'exécution...

    voici un extrait de la fonction où sa plante :
    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
    void
    DataMatrice::getPop(int pos, bool Cur) {
    	fstream f;
    	string path=_nameTab[pos]+".txt";
    	f.open(path.c_str(), ios::in);
    	if (!f.is_open()) {
    		cout << "error::unable to open file" << endl;
    	}
    	string trash;
    	int count=0;
    	for (int i=0; i<5; i++) 
    		f >> trash;
    	int size;
    	int n=0;
    	if (Cur) {
    		f >> _numTabCur;
    		for (int i=0; i<_numTabCur; i++) {
    			f >> _sizeTabCur[i];
    		}
    		_biggerSizeCur=_sizeTabCur[_numTabCur-1];
    		f >> trash;
    		f >> trash;
    		for (int i=0; i<_numTabCur; i++)
    			for (int j=0; j<_sizeTabCur[i]; j++) {
    				f >> _curPop[i][j];
    				cout << "_curPop[" << i << "][" << j << "]=" << _curPop[i][j] << " " << endl;
    				count++;
    				n++;
    			}
    	}
            f.close();
    }
    ça plante au début du if à l'instruction
    j'ai vérifié en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cout << "test1" << endl;
    f >> _numTabCur;
    cout << "test2" << endl;
    et je n'ai bien sur que test1 qui s'affiche (avec Segmentation Fault après)

    pour info, voici un extrait du header où est déclaré _numTabCur :
    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
    const int MAX_SIZE=65530;
    const int MAX=800;
     
    class DataMatrice {
    	private :
    	string _path;
    	string _nameTab[MAX_SIZE];
    	int _numPop;
    	float _matrice[MAX][MAX];
    	unsigned short _curPop[MAX][MAX];
    	unsigned short _tempPop[MAX][MAX];
    	int _sizeTabCur[MAX];
    	unsigned short _numTabCur;
    	int _biggerSizeCur;
    	int _sizeTabTemp[MAX];
    	unsigned short _numTabTemp;
    	int _biggerSizeTemp;
    	int _sizeCompare[MAX];
    	unsigned short X[MAX][MAX];
    	unsigned short Y[MAX][MAX];
            [...]
            public :
            void getPos(int pos, bool Cur);
    };
    (le code compile, les using namespace sont à priori bien placés, à priori idem pour les header)

    Merci d'avance, Léo

    P.S.: je sais que le code n'est pas très optimisé (notamment les f >> trash à répétition mais ce n'est pas, pour l'instant, mon soucis le plus important)

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Es-tu sûr que this est valide quand tu appelles cette fonction membre ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Débogue avec gdb et valgrind.
    Boost ftw

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Es-tu sûr que this est valide quand tu appelles cette fonction membre ?
    je ne comprends pas très bien ce que tu veux dire

    mais le problème est résolut, un inconvénient : je ne sais pas pourquoi...

    c'est un peu dangereux

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En clair, vérifie que tu n'as pas un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DataMatrice *pObj; //Non-initialisé
    pObj->getPop(42, true);
    Bref, vérifie que tu n'appelles pas la fonction sur un pointeur invalide (ou une référence invalide, ce qui peut arriver si on fait l'idiot avec les pointeurs)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    oki oki, je ne déclarais pas de pointeurs et j'avais bien initialisé à l'instanciation mais bon ça ne me fait plus le seg fault alors que j'ai rien changé (j'ai rajouté un cout juste avant une fois, ça a remarché, je l'ai enlevé, ça a continué à marché...)

    Merci quand même pour ton aide, bonne journée

    Léo

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 943
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 943
    Points : 5 655
    Points
    5 655
    Par défaut
    Gao,
    Citation Envoyé par lguignar Voir le message
    oki oki, je ne déclarais pas de pointeurs et j'avais bien initialisé à l'instanciation mais bon ça ne me fait plus le seg fault alors que j'ai rien changé (j'ai rajouté un cout juste avant une fois, ça a remarché, je l'ai enlevé, ça a continué à marché...)

    Merci quand même pour ton aide, bonne journée

    Léo
    En clair, tu as un comportement indéfini, et ton problème n'est pas résolu.
    Si les cons volaient, il ferait nuit à midi.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    oui je sais, cay mal, mais ça marche..... pour l'instant

    il faut que j'essaye de régler ce problème avant que ça me retombe dessus et que je ne recromprenne pas d'où ça vient et que je perde encore du temps...

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 943
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 943
    Points : 5 655
    Points
    5 655
    Par défaut
    Geo,
    Citation Envoyé par lguignar Voir le message
    oui je sais, cay mal, mais ça marche..... pour l'instant

    il faut que j'essaye de régler ce problème avant que ça me retombe dessus et que je ne recromprenne pas d'où ça vient et que je perde encore du temps...
    Pourquoi re ?

    Tu n'as pas encore compris une fois.

    Pourquoi encore ?

    Tu n'as pas le choix si tu veux un programme stable.
    Si les cons volaient, il ferait nuit à midi.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    ben il a déjà buggé, il ne bug plus, marche très bien.
    Mais bon c'est pas stable comme tu dis

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

Discussions similaires

  1. Segfault sur **int
    Par Orci76 dans le forum C
    Réponses: 3
    Dernier message: 20/11/2014, 06h23
  2. Segfault sur un int?
    Par lguignar dans le forum C++
    Réponses: 9
    Dernier message: 18/07/2008, 10h03
  3. Contrôle de saisie sur un int
    Par Spont dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 12/11/2007, 15h23
  4. Segfault sur contructeur de string
    Par lemmel dans le forum SL & STL
    Réponses: 7
    Dernier message: 02/09/2007, 13h50

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