problème avec malloc en C
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

problème avec malloc en C



  1. #1
    invite5d5dfac0

    problème avec malloc en C


    ------

    bonjour, je réalise un projet en C sur le traitement d'images. Je suis en ce moment sur la décompression de fichier 4T (format créé de toute pièce) dans lequel on utilise des arbres quadratique. là n'est pas le problème.

    Pour les arbres, j'utilise cette structure:
    Code:
    typedef struct 
    {
        char b;
        char v;
        char r;
    }PIXEL;
    
    struct noeud
    {
    PIXEL value;
    struct noeud * pere;
    struct noeud * fils1;
    struct noeud * fils2;
    struct noeud * fils3;
    struct noeud * fils4;
    };
    j'utilise aussi une fonction pour ajouter un 4 noeud à un noeud existant (lui donner 4 fils):
    Code:
    void ajouternoeuda(struct noeud *n)
    {
    
    n->fils1=(struct noeud *)malloc(sizeof(struct noeud));
    n->fils2=(struct noeud *)malloc(sizeof(struct noeud));
    n->fils3=(struct noeud *)malloc(sizeof(struct noeud));
    n->fils4=(struct noeud *)malloc(sizeof(struct noeud));
    n->fils1->pere = n;
    n->fils2->pere = n;
    n->fils3->pere = n;
    n->fils4->pere = n;
    n->fils1->fils1 = NULL;
    n->fils1->fils2 = NULL;
    n->fils1->fils3 = NULL;
    n->fils1->fils4 = NULL;
    n->fils2->fils1 = NULL;
    n->fils2->fils2 = NULL;
    n->fils2->fils3 = NULL;
    n->fils2->fils4 = NULL;
    n->fils3->fils1 = NULL;
    n->fils3->fils2 = NULL;
    n->fils3->fils3 = NULL;
    n->fils3->fils4 = NULL;
    n->fils4->fils1 = NULL;
    n->fils4->fils2 = NULL;
    n->fils4->fils3 = NULL;
    n->fils4->fils4 = NULL;
    }
    La compilation du programme s'effectue bien, mais un problème survient au niveau de :
    Code:
    n->fils1=(struct noeud *)malloc(sizeof(struct noeud));
    j'ai localisé ce passage grâce à des printf un peu partout, si j'en met un avant, ça l'affiche, mais un après, ça ne l'affiche pas...

    je précise qu'à l'exécution, j'ai une erreur du type: "compressionT4.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru."

    j'utilise devc++ pour programmer. je n'arrive pas à utiliser le debug...
    ayant visual C++, lors du message d'erreur j'ai la possibilité de debugger avec Visual C++.
    il me met:
    "Unhandled exception in compressionT4.exe 0xC0000005: Access Violation"
    je ne sais pas si c'est important...

    merci de me dire si quelque chose ne va pas (c'est la première foi que j'utilise malloc...)

    bonne soirée!
    Olivier

    -----

  2. #2
    invite765732342432
    Invité

    Re : problème avec malloc en C

    Comment as-tu appelé ta fonction ajouternoeuds() ?

    car chez moi ton code marche, sous réserve de donner un argument valable à la fonction, c'est à dire un pointeur vers un espace mémoire valide.
    Dernière modification par invite765732342432 ; 06/03/2009 à 18h31.

  3. #3
    invite5d5dfac0

    Re : problème avec malloc en C

    merci d'avoir répondu si rapidement!
    j'utilise une fonction récursive pour lire le fichier 4T (auparavant rentré dans un tableau de char)

    Code:
    void lire4T(char bytes[],struct noeud *node, int *bit, int n){
         int valeur=lirebitarbre(bytes,*bit);
         
         if(valeur==2){printf("erreur"); system("pause");} 
         if(valeur==0){
                       node->value = couleur(bytes,bit);
                       return;
                       }
         
         if(valeur==1){
    
         ajouternoeuda(node);
          (*bit)++;                                     
         lire4T(bytes,node->fils1,bit,n+1);
          (*bit)++;
         lire4T(bytes,node->fils2,bit,n+1);
          (*bit)++;
         lire4T(bytes,node->fils3,bit,n+1);
          (*bit)++;
         lire4T(bytes,node->fils4,bit,n+1);
         }       
    }

    et dans le main:
    Code:
        
        struct noeud *racine;
        [...]
        lire4T(bytes,racine,&n,0);
    la fonction couleur se charge de récupérer la couleur à l'adresse (ici bit et décale le pointeur pour une prochaine lecture);

    merci d'avance!
    Olivier

  4. #4
    invite765732342432
    Invité

    Re : problème avec malloc en C

    Citation Envoyé par olver62 Voir le message
    et dans le main:
    Code:
        
        struct noeud *racine;
        [...]
        lire4T(bytes,racine,&n,0);
    Voilà le (un ?) problème: tu appelle lire4T avec la variable racine qui est un pointeur. Mais celui-ci n'est pas initialisé (il pointe donc n'importe où dans la mémoire)

    Avant d'appeler lire4T, il faut faire un malloc pour racine (c'est à dire réserver un espace mémoire pour ce pointeur)

    Ceci dit, je n'arrive pas à imaginer qu'on puisse te demander de manipuler un arbre (non binaire en plus) sans avoir jamais touché aux pointeurs ! Normalement, on commence avec des chaines de caractères, et c'est déjà pas mal !
    Un conseil: essaye de trouver des cours/tutoriels sur les pointeurs de manière à partir sur de bonnes bases. Sinon, je ne pense pas que tu arriveras à réaliser ton projet.

  5. A voir en vidéo sur Futura
  6. #5
    invite5d5dfac0

    Re : problème avec malloc en C

    merci beaucoup! pour cette réponse!! je n'avais pas pensé à ce que j'envoyais dans le main... lol maintenant la récursion semble fonctionner!
    sinon, j'aurais un autre question qui n'a rien avoir avec le maloc.
    je souhaiterais lire un fichier bit par bit. (pour pouvoir créer l'arbre...)
    pour cela je voudrais le lire octet par octet puis le décomposer en bit.
    l'idéal serrais de pouvoir lire le octet à une position souhaitée dans le fichier...
    j'ai essayé avec fseek et getc , fread, fscanf, mais je pense que j'utilise mal fseek...
    Code:
    int position;
    char octet;
    
    fseek(t4,0,position);
    octet=getc(t4);
    c'est correct ou plein d'erreur??
    Merci d'avance!

  7. #6
    invite5d5dfac0

    Re : problème avec malloc en C

    en fait j'ai peut être trouvé... j'avais une boucle pour détecter la fin du fichier, mais il la détectait trop rapidement... je lit tout les octet du fichier pour le stocker dans un tableau (car lire le nième element d'un tableau, ca je sais faire! lol)
    Code:
        while((test=getc(t4))!=EOF){
               bytes[nombrebits++]=test;
               }
    mais le EOF doit être détecté trop vite... je n'ai qu'un élément dans mon tableau...


    bonne soirée!
    Olivier

Discussions similaires

  1. Probleme avec la connection USB avec PC sous linux !! !
    Par invite36d52cc8 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 12/12/2008, 22h45
  2. [Biologie Moléculaire] Problème avec gel d'acrylamide avec urée
    Par invite85934679 dans le forum Biologie
    Réponses: 3
    Dernier message: 14/02/2008, 11h53
  3. probleme avec vista -> lecture du son avec fichier .mpg
    Par invite7f1547ae dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 23/01/2008, 23h28
  4. Problème avec un exo avec un prisme.
    Par invite05f3d245 dans le forum Mathématiques du collège et du lycée
    Réponses: 10
    Dernier message: 04/11/2007, 23h04
  5. Problème avec un exercice avec un prisme.
    Par invite05f3d245 dans le forum Mathématiques du collège et du lycée
    Réponses: 0
    Dernier message: 03/11/2007, 16h17
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...