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 :

Problème avec segmentation fault


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Gobelins
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Par défaut Problème avec segmentation fault
    Bonjour,

    J'ai écrit un code source en c et en Opengl afin de générer un terrain. Le programme se compile, mais lors de l'exécution, il m'affiche segmentation fault. J'ai lancer le debugger et voici le résultat du debugger: erreur au niveau de cette ligne

    glVertex3f(posi,m.heightmap[i][j]*alt,posj);

    et que la fonction dessine_sol (x=-1 et y=-2)

    Aidez-moi

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    J'ai l'impression que tu "jardines" hors de ton jardin et que tu as explosé les valeurs de tes indices.

    • quelle est la taille du tableau m.heightmap ?
    • Quelle sont les valeurs de i et de j lorsque ton programme se plante ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre confirmé Avatar de Gobelins
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Par défaut Program received signal SIGSEGV, Segmentation fault.
    Quand je lance le debugger par le menu Debug-> Start, voici ce qui m'affiche:

    Building to ensure sources are up-to-date
    Build succeeded
    Selecting target:
    Debug
    Adding source dir: I:\Informatique\Technique de rendu\paysage\
    Adding source dir: I:\Informatique\Technique de rendu\paysage\
    Adding file: bin\Debug\paysage.exe
    Starting debugger:
    done
    Registered new type: wxString
    Registered new type: STL String
    Registered new type: STL Vector
    Setting breakpoints
    Debugger name and version: GNU gdb 6.7.50.20071127
    Child process PID: 632
    Program received signal SIGSEGV, Segmentation fault.
    At I:/Informatique/Technique de rendu/paysage/terrain.c:233

    En plus, une autre fenetre qui s'appelle Call Stack où il y a le nom des fonctions indiquant la présence des erreurs grace aux numéros de lignes.

    -dessine_sol(x=-1, y=-2)
    -choisir_texture()
    -display()
    -glutMainLoop()
    -glutMainLoop()
    -main(argc=1, argv=0x3e2638)

    choisir_texture() et displaya() appellent dessine_sol.
    glutMainLoop est appelée dans main.

    Quand je lance par le menu Debuf->Debugging windows->Watches, une fenetre qui affiche ceci :

    Local variables
    m
    name=0x47fa0000 <Adress 0x47fa0000 out of bounds>
    name_texture=0x0
    heightmap=0x0
    texchrg=0x0

    i=0
    j=0
    posi=-5121
    posj=-10240

    Function Arguments
    x=-1
    y=-2

    Je n'ai pas affiché le code source car il est assez long, cependant si vous voulez que je l'affiche pour mieux éclaircir et m'aider à trouver les erreurs, je l'afficherai dans le prochain message.

    Merci d'avance de votre aide et pour ceux qui s'intéressent à résoudre mon problème.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour, tu as une double erreur: la principale est que la structure m n'a pas été malloquée, donc quand tu essayes d'accéder à un élément le programme segfault immediatement. Ensuite, les variables i et j sont négatives, or les index d'un tableau doivent etre positifs, d'où une erreur que tu auras dès que tu auras corrigé la première!

  5. #5
    Membre confirmé Avatar de Gobelins
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Par défaut
    m est déclarée dans cette fonction, n'est-ce pas:

    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
    /*Charger une heightmap, remplit la matrice d'altitude, puis cree la matrice de couleurs et genere la texture correspondante */
    multitexture creer_texture(multitexture m){
     
        int i,j;
        int k,l;
        Image *image = (Image *) malloc(sizeof(Image));
        ImageLoad(m.name, image);
        //remplisage de la matrice d'altitude 'mt.heightmap[][]':
        m.heightmap=(float**)malloc(SIZE*sizeof(float*));
        for (i=SIZE-1,k=0;i>0;i--,k++){
            m.heightmap[k]=(float*)malloc (SIZE*sizeof(float));
            for(j=0,l=0;j<SIZE*3;j+=3,l++){
                m.heightmap[k][l]=image->data[i*image->sizeX*3+j];
                pourcentage[k][l]=Terrain_RemplitPart(m.heightmap[k][l]);//calcul de la matrice de couleur
            }
        }
       generer_texture(m);//generation de la nouvelle texture
       free(image);
       return m;
    }

  6. #6
    Invité
    Invité(e)
    Par défaut
    En voyant ton code, je viens de comprendre que name est une variable de ta structure m. Selon gdb, name n'a pas été initialisé puisqu'il te dit que l'adresse est outofbounds, d'où certainement des erreurs ensuite. Teste la valeur de m et de ses champs à la fin de la fonction de remplissage. Et teste le retour de malloc!

Discussions similaires

  1. Problème de segmentation fault
    Par skysee dans le forum C++
    Réponses: 4
    Dernier message: 25/01/2009, 10h06
  2. problème de "segmentation fault"
    Par reivilouadivad dans le forum C++
    Réponses: 2
    Dernier message: 05/03/2008, 08h54
  3. problème de segmentation fault
    Par cheff dans le forum Débuter
    Réponses: 4
    Dernier message: 21/02/2008, 11h26
  4. Réponses: 6
    Dernier message: 01/11/2007, 18h44
  5. [Socket SSL] problème de "Segmentation fault"
    Par jesus144 dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 09/03/2007, 19h50

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