Pb d'allocation de memoire en C
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
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
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
A voir également:
- Pb d'allocation de memoire en C
- Mémoire vive - Guide
- RAM : type, format, CAS, vitesse, tout sur la mémoire vive - Guide
- Nettoyer memoire iphone - Guide
- C'est un secret bien gardé : ce réglage d'expert peut doper les performances de votre PC - Guide
- Mémoire virtuelle pour 32 go de ram - Guide
16 réponses
Salut,
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:
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;
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
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
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);
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);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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?
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?
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?
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...
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...
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
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
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.
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
car c'est un projet à rendre et je ne veux le mettre en public sinon n'importe qui pourra le copier
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 ?
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 ?