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 :

Segmentation Fault / Core Dumped


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Par défaut Segmentation Fault / Core Dumped
    Bonjour,

    J'étais en train de coder le plus normalement du monde et en introduisant un simple COUT dans une fonction pour connaître la valeur d'une variable, catastrophe.

    La compilation se passe bien mais à l'execution, la fenêtre de Cygwin m'affiche un lapidaire: Segmentation Fault (Core Dumped).

    J'ai tout de suite retiré du code le COUT incriminé et rebelote, le même message apparait quelque soit les modifications apportées.

    J'ai donc deux questions à vous poser:
    1) Comment faire pour que ce message n'apparaisse plus.
    2) Que signifie-t-il?

    En vous remerciant.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Les causes de ce problème peuvent être multiples. Les plus probables sont :
    -> déréférencement d'un pointeur nul ;
    -> déréférencement d'un pointeur non intialisé ;
    -> déréférencement d'un pointeur libéré ;
    -> delete multiple sur la même adresse ;
    -> dépassement de pile ;
    -> liste non exhaustive.
    Un peu de code aiderait probablement à identifier le problème.

  3. #3
    Membre chevronné Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Par défaut
    De manière générale : Tentative d'intrusion mémoire. Tu tentes d'accéder à de la mémoire qui n'appartient pas à ton prog.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Par défaut
    Bonjour,

    merci pour vos réponses.

    Dans cet exercice, il s'agissait de répartir les nbres impairs dans un nouveau tableau. Ces nombres impairs étaient contenus intitalement dans un premier tableau.

    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
     
    using namespace std;
    #include <iostream>
    #include "EntreeSortie.h"
    #include "TabInt.h"
     
    //afficher un tableau
    void lire(char mes[],int tab[],int nbLignes){
    	cout<<mes<<"\n";
    	for(int i=0;i<nbLignes;i++){
    		afficher("Ligne= ",i+1);
    		cin>>tab[i];
    	}
    }
     
    //afficher un tableau à l'écran
    void affiche(char mes[],int tab[],int nbLignes){
    	cout<<mes<<"\n";
    	for(int i=0;i<nbLignes;i++){
    		afficher("Ligne= ",i+1);
    		afficher(" ",tab[i]);
    	}
    }
     
    //Remplir un tableau avec des nbres impairs 
    void afficheTabImpair(int tab[],int nbLignes){
    	int taille_impair=nbreImpaire(tab,nbLignes);
    	int tabImpair[taille_Impair];
    	int j=0;
    	while(j<taille_impair){
    		for(int i=0;i<nbLignes;i++){
    			if ((tab[i]%2)==0){
    			tabImpair[j]=tab[i];
    			j++;
    			}
    		}
    	}
    }
    tab:le tableau initial
    nbLignes: sa longueur
    tabImpair: le tableau nouvellement créé
    taille_impair: sa taille

    j'ai aussi un autre fichier de définition (EntreeSortie.c) avec une autre fct "lire" qui renvoit, elle , un INT (c'est juste histoire de vérifier que la taille soumise est bine un entier et non un char par exemple) mais il ne pose de pas de soucis, j'ai travaillé avec à plusieurs reprises.

    j'avais placé le COUT juste aprés le j++. Et il me semble qu'au moment où je l'ai mis, j'avais oublié de le définir (le nouveau tableau) dans le Client:

    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
    #include "EntreeSortie.h"
    #include "TabInt.h"
    #include<iostream>
     
    int main(){
     
    //remplir et afficher un tableau
    int taille=lire("Entrez la taille du tableau (>0):",0,INT_MAX);
    int tab[taille];
    lire("Entrez les valeurs du tableau\n",tab,taille);
    affiche("Voila le tableau saisi\n",tab,taille);
     
    //y extraire les nbres impairs et les placer dans un nouveau tableau
    int taille_impair;
    int tabImpair[taille_impair];
    afficheTabImpair(tabImpair,taille_impair); //remplir le nv tableau
    affiche("Voila le tableau de nbres IMPAIRS:\n",tabImpair,taille_impair);
    }

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    C'est amusant mais (tab[i]%2)==0 teste si la valeur est paire...
    Sinon, ton while n'est pas correct car j peut dépasser taille_impair, la boucle sur i ne testant pas j. Ce devrait ressembler à ça (dans la logique de ce que tu écris) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int i=0, j = 0;(i<nbLignes)&&(j<taille_impair);i++){
       if ((tab[i]%2)==0){
       tabImpair[j]=tab[i];
       j++;
    }
    Sinon, ton code est très très loin de ressembler à du C++ :
    -> Tu devrais éviter les using namespace std; et tout particulièrement avant l'inclusion des fichiers d'en-têtes ;
    -> Les chaînes de caractère devrait utiliser std::string ;
    -> int tabImpair[taille_Impair] est illégal en C++ : taille_Impair doit être une constante connue à la compilation et non obtenue à l'exécution ;
    -> Les tableaux devraient être des std::vector<int>.
    -> L'utilisation des algos de la STL simplifierait grandement la solution à l'exercice.

  6. #6
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    -> int tabImpair[taille_Impair] est illégal en C++ : taille_Impair doit être une constante connue à la compilation et non obtenue à l'exécution ;
    C'est vrai ca ?

    Cela m'étonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void bar (int*, int);
     
    void foo (int n)
    {
        int tab[n];
     
        bar (tab, n);
    }
    Ne me donne aucun warning avec g++ -Wall -Wextra...

    G++ GNU ne répond pas à la norme C++ ?

Discussions similaires

  1. segmentation fault (core dumped)
    Par domdom974 dans le forum Fortran
    Réponses: 2
    Dernier message: 04/08/2009, 09h07
  2. [ASE 15.0.3] Segmentation Fault - core dumped
    Par dngaya dans le forum Adaptive Server Enterprise
    Réponses: 0
    Dernier message: 04/06/2009, 10h55
  3. segmentation fault (core dumped)
    Par miamiam dans le forum Débuter
    Réponses: 3
    Dernier message: 26/11/2008, 11h46
  4. Réponses: 1
    Dernier message: 10/12/2006, 21h37
  5. Segmentation fault (core dumped)
    Par Battosaiii dans le forum C
    Réponses: 13
    Dernier message: 25/11/2005, 18h36

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