Pb d'allocation de memoire en C

Fermé
Utilisateur anonyme - 15 janv. 2009 à 15:22
 Utilisateur anonyme - 16 janv. 2009 à 17:44
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

16 réponses

Utilisateur anonyme
15 janv. 2009 à 15:32
quelqu'un peut-t-il m'aider?
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
15 janv. 2009 à 16:16
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
Utilisateur anonyme
15 janv. 2009 à 16:32
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
Utilisateur anonyme
15 janv. 2009 à 16:38
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
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
15 janv. 2009 à 16:51
C'est vraiment bizzare ton truc. C'est sensé n'arriver que quand on n'a plus de mémoire.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
15 janv. 2009 à 16:49
quelqu'un qui peut m'aider?
0
Utilisateur anonyme
15 janv. 2009 à 16:54
c'est vrai je n'y comprend rien
ca me casse la tête
0
Utilisateur anonyme
15 janv. 2009 à 17:02
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
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
15 janv. 2009 à 17:04
Je sais pas :-)
0
Utilisateur anonyme
15 janv. 2009 à 17:20
quelqu'un peut m'aider a debogger avec DevC++
0
Utilisateur anonyme
15 janv. 2009 à 17:47
bon alors puisqu'aucun ne peut m'aider comment peut on voir l'état de la memoire sous VS?
0
Utilisateur anonyme
15 janv. 2009 à 17:49
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
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
15 janv. 2009 à 20:17
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
Utilisateur anonyme
15 janv. 2009 à 20:35
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
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
Utilisateur anonyme
15 janv. 2009 à 20:41
d'accord merci
mais dernière chose : par envoyer vous voulez dire par mail ou sur le forum?
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
15 janv. 2009 à 20:48
Sur le forum, en utilisant les balises < code> </code> pour garder l'indentation.
0
Utilisateur anonyme
15 janv. 2009 à 20:56
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
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
Utilisateur anonyme > loupius
16 janv. 2009 à 17:44
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
15 janv. 2009 à 21:22
Salut
Je n'ai pas tout lu. Mais n'aurais-tu pas oublié d'inclure stdlib.h ? (On ne sait jamais ^^).
0
Utilisateur anonyme
15 janv. 2009 à 21:29
nonn c'est pas ça mais merci encore
0