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 :

tableaux et segmentation fault


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Par défaut tableaux et segmentation fault
    bonjour à tous,

    dans le cadre d'une modélisation physique, je suis amené à utiliser des tableaux de grande dimension.
    Je dispose de données pré-tabulées et stockées dans des fichiers, qu'il me faut acquérir pendant l'exécution du prgramme.

    Ma procédure est très classique:
    1. déclaration statique d'un tableau de type TAB[x][y][z] où les dimensions x,y,z sont connues et fixes
    2. "remplissage" du tableau déclaré à base de fscanf pointés vers le fichier de référence.

    Je procède à plusieurs lectures successives depuis plusieurs fichiers vers plusieurs tableaux distincts.

    Cependant la p*tain de segmentation fault apparait de façon inexpliquée :

    en effet, je parviens à acquérir chaque tableau individuellement (cad en les testant dans des fichiers .c distincts), ce qui confirme que le code de lecture n'est pas buggé, et que pour chaque tableau le quota mémoire n'est pas excédé, mais lorsque je déclare puis remplis ces tableaux A LA SUITE au sein d'un seul fichier .c, la seg fault apparait après 3/4 tableaux.

    les dimensions utilisées sont de l'ordre de [100 000][8] (float)

    A quoi est du ce plantage?
    Quelle technique utiliser pour contourner ce problème?

    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    ces 3 ou 4 tableaux sont-ils définis à l'intérieur d'une même fonction ou en variables globales ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Par défaut
    le seg fault survient lorsque les tableaux sont déclarés puis remplis successivement au sein d'un même main{}.

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Ils sont alors mis tous sur la pile où la place est limitée.
    Dans le cas de grosses structures de données, il vaut mieux les allouer dynamiquement sur le tas (avec malloc) ou en variables globales

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Par défaut
    C'est ce que j'appelle une info utile!

    Merci, j'essaie ça lundi.

    bonne soirée

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ou les declarer en statiques dans le module contenant le main... ou dans celui faisant la lecture/les calculs....

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par diogene Voir le message
    ou en variables globales
    Sans ce cas, un simple 'static' suffit, inutile d'élargir la portée. Tu voulais sans doute dire 'statique'.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int main(void)
    {
       /* aa[BIG][BIG]; Crashy ! */
     
       static aa[BIG][BIG];
     
       <...>

Discussions similaires

  1. Pb segmentation fault avec glutinit()
    Par pipistrelle dans le forum GLUT
    Réponses: 2
    Dernier message: 17/11/2004, 23h17
  2. [SDL_Image] Img_Load : segmentation fault ....
    Par Mathieu.J dans le forum OpenGL
    Réponses: 6
    Dernier message: 19/10/2004, 23h52
  3. [REDHAT] Segmentation fault systematique
    Par mela dans le forum RedHat / CentOS / Fedora
    Réponses: 2
    Dernier message: 21/09/2004, 06h05
  4. Réponses: 13
    Dernier message: 13/07/2004, 15h41
  5. Comment contrer la "segmentation fault" ?
    Par guillaume_pfr dans le forum C
    Réponses: 15
    Dernier message: 08/08/2003, 13h43

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