Pb d'allocation de memoire en C

velocity -  
 velocity -
salut à tous,
j'aimerai que vous m'aidiez a resoudre un problème d'allocation de memoire en C
le pb c'est dans une fonction ou je dois creer une nouvelle cellule pour travailler dessus

typedef struct cellule {
int val;
cellule next;
}*

fonction (){

cellule *NC = (cellule *)malloc(sizeof(cellule));
if(NC){
.
.
.
}

}
et ben ca ne veux pas marcher et ça retourne NULL a chaque fois alors le programme ne fait plus sont travail .

pourtant ca fonctionne très bien dans d'autre fonction d'allocation

je me demande si c'est parceque je ne fait pas la liberation de memoire a la fin , je ne sais pas si le la liberation peut ce fait toute seule ou pas a la sortie du programme

si quelqu'un peut m'aider svp j'en serai reconnaissant
Configuration: Windows Vista
Firefox 3.0.4

16 réponses

  1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Salut,

    typedef struct cellule {
    int val;
    cellule next;
    }* 


    D'abord syntaxiquement c'est faux, l'étoile n'a rien à faire là.
    Ensuite c'est impossible que ce genre de truc puisse compiler, sinon ça signifie qu'il faudrait allouer récursivement de la mémoire à l'infini pour lui allouer de la mémoire.
    Corrige moi si je me trompe, mais je suppose que tu voulais faire un truc comme ça:
    struct __cellule {
        int val;
        struct __cellule *next;
    } cellule;

    0
  2. velocity
     
    salut kilan,
    pour la struct elle fausse t'a raison mais je l'est écrit juste comme exmple , j'ai fait la compilation du programme et résolu tout les erreur et maintenant je suis coinsé avec l'execution ,
    pour la structure je m'en fou ce qui m'interesse c'est la problème d'allocation en fait a chaque fois que j'execute le programme en mode debug il retourne null pour chaque allocation je ne sais pas ce qui lui arrive
    c'est comme il n'y avait plus de memoire pour l'allocation, exmple!:

    si je fait NC = (cellule*)malloc(sizeof(cellule)
    a l'execution NC vaut NULL;

    vous comprenez maintenant le problème ?

    je vais essayer de faire une allocation pour un caractère ou chaine de caractère pour comprendre plus d'ou vient le pb
    0
  3. velocity
     
    voila j'ai essayer ceci:
    s = (char *)malloc(sizeof(char)*100); //ici s=NULL
    s = "allocation reussi"; //ici s != NULL je crois que c'est normal puisque j'ai fait une allocation implicite avec
    printf("%s",s);
    0
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      C'est vraiment bizzare ton truc. C'est sensé n'arriver que quand on n'a plus de mémoire.
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. velocity
     
    c'est vrai je n'y comprend rien
    ca me casse la tête
    0
  6. velocity
     
    j'ai installé devC++ mais je ne sais pas comment faire le debug pas à pas comme en VS peut tu m'aider vite fait svp?
    0
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      Je sais pas :-)
      0
  7. velocity
     
    quelqu'un peut m'aider a debogger avec DevC++
    0
  8. velocity
     
    bon alors puisqu'aucun ne peut m'aider comment peut on voir l'état de la memoire sous VS?
    0
  9. velocity
     
    j'ai rencontré une erreur lors de l'execution qui dit :
    Exception non gérée à 0x76e8d292 dans forum.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x00040f0c.

    qu'est ce que ça veut dire?
    0
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      Exception non gérée à 0x76e8d292 dans forum.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x00040f0c.

      Ca veut dire que tu essaie d'écrire à un endroit de la mémoire qui ne t'appartient pas. En gros, tu écris sans doute dans un poitneur non alloué ou un dépassement de tableau, ou...
      0
  10. velocity
     
    c'est a cause de l'allocation de memoire qui retourne toujours NULL
    peut tu me dire si on peut voir l'état de la memoire en cours d'execution ou comment faire le vidage de memoire ou quelque soit qui peut me résoudre le pb?
    svp! j'en ai vraiment besoin pour continuer
    0
  11. loupius
     
    Rebootes ta machine et si c'est toujours pareil, envoie-nous tout le code à moins qu'il y en ait trop (et dans ce cas il faut le réduire et voir si le problème subsiste) et prière de ne pas oublier les balises sinon je ne regarde pas.
    0
  12. velocity
     
    d'accord merci
    mais dernière chose : par envoyer vous voulez dire par mail ou sur le forum?
    0
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      Sur le forum, en utilisant les balises < code> </code> pour garder l'indentation.
      0
  13. velocity
     
    est ce qu'il y a une possibilité de vous l'envoyer par email?
    car c'est un projet à rendre et je ne veux le mettre en public sinon n'importe qui pourra le copier
    0
    1. loupius
       
      Il faudrait réduire le code au strict minimum, c'est-à-dire suffisamment pour que l'anomalie persiste et pour ne pas dévoiler ce qui ne doit pas l'être.
      0
      1. velocity > loupius
         
        salut lupius,
        je crois savoir d'ou vient le pb en fait j'utilise un arbre n-aire avec les structure suivante:

        struct Noeud{ //liste des message
        char id[6];
        char id_parent[6];
        char id_subject[6];
        char id_user[21];
        char date[15];
        char content[201];
        struct Cellule * response;
        };
        typedef Noeud* Message;

        struct Cellule{ //arbre n-aire de reponse
        struct Noeud * message;
        struct Cellule * next;
        };
        typedef Cellule* Response;

        je pense que le pb vient d'ici :

        R = (Response)calloc(1,sizeof(Response));

        la premier fois ca passe sans erreur et la deuxième fois il retourne NULL
        qu'est ce que tu en dit ?
        0
  14. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut
    Je n'ai pas tout lu. Mais n'aurais-tu pas oublié d'inclure stdlib.h ? (On ne sait jamais ^^).
    0