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

Bibliothèque standard C Discussion :

Segmentation fault après malloc


Sujet :

Bibliothèque standard C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Par défaut Segmentation fault après malloc
    Bonjour,

    J'ai une erreur 'Segmentation fault" qui apparaît quand j'accède à nPixel[1596][0]. nPixel est de type t_pixel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct
    {
        unsigned char rouge;
        unsigned char vert;
        unsigned char bleu;
    }
    t_pixel;
    J'alloue de la mémoire à nPixel de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    nPixel = malloc(nHauteur*sizeof(t_pixel)); //nHauteur = 2120
        if(nPixel==NULL) return -1;
        for(i=0;i<nHauteur;i++)
        {
            nPixel[i] = malloc(nLargeur*sizeof(t_pixel));   //nLargeur = 1978
            if(nPixel[i]==NULL) return -1;
        }
    J'accède à nPixel comme ceci:
    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
     
        for(Yd=0;Yd<nHauteur;Yd++)
        {
            for(Xd=0;Xd<nLargeur;Xd++)
            {
                Xo = (Xd-Xa)*cos(angle)+(Yd-Ya)*sin(angle)+Xa;
                Yo = -(Xd-Xa)*sin(angle)+(Yd-Ya)*cos(angle)+Ya;
                /*hauteur = 1276 largeur = 1754*/
                if(Xo<0||Xo>=largeur||Yo<0||Yo>=hauteur)
                {
                    nPixel[Yd][Xd].bleu = 0; //Ca plante ici avec "Segmentation fault" pour Yd = 1596
                    nPixel[Yd][Xd].vert = 0;
                    nPixel[Yd][Xd].rouge = 0;
                }
                else
                    nPixel[Yd][Xd] = image->Pixel[Yo][Xo];
    Ca plante pour Yd = 1596 et Xd = 0 à la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nPixel[Yd][Xd].bleu = 0;
    Le programme donne des valeurs à nPixel[Yd][Xd] sans problèmes pour Yd = 0 à 1595.

    Je ne comprends pas qu'il y ait cette erreur étant donné que l'allocation a marché (il n'y a pas eu de sortie de la fonction due au test du retour de malloc). Donc j'ai bien un bloc de [2120]x[1978] pour nPixel. Et il me fait une segmentation fault à 1596 alors que j'ai ce qu'il faut jusqu'a 2120-1.

    Je vous remercie d'avance si quelqu'un peut m'aider à trouver le problème.

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nPixel = malloc(nHauteur*sizeof(t_pixel *)); //nHauteur = 2120

  3. #3
    Membre confirmé
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Par défaut
    Un grand merci! Ma fonction rotation marche maintenant c'est un bonheur.

    Je suis désolé j'aurai dû voir ça.

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

Discussions similaires

  1. Recupérer un trace apres segmentation fault
    Par elraton dans le forum Linux
    Réponses: 2
    Dernier message: 06/08/2010, 15h36
  2. Réponses: 9
    Dernier message: 24/01/2008, 12h53
  3. Malloc et segmentation fault sous Linux
    Par Del4king dans le forum C
    Réponses: 16
    Dernier message: 15/11/2006, 17h10
  4. malloc et segmentation fault
    Par booby dans le forum C
    Réponses: 35
    Dernier message: 11/07/2006, 14h50
  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