Question en C (pointeur)
AbouSaid
-
AbouSaid -
AbouSaid -
bonjour,
j'ai un message d'erreur en lançant un petit prog en C et je ne vois pas la cause. QQ peut-il m'aider SVP ?
Voilà ce que fait le prog :
Déclaration d'une fonction :
unsigned long ma_fct (long No, char **Nom);
char *Nom, *ptr;
main()
{
....
ptr= (char *)malloc(100 * sizeof (char));
ma_fct(1,&ptr);
...
}
Le progrmme s'arrete à l'appel de la fonction avec l'erreur :
(L'instruction à "0x00401c01" emploie l'adresse mémoire "0x000000000".La mémoire ne peut etre "written"
Merci beacoup
j'ai un message d'erreur en lançant un petit prog en C et je ne vois pas la cause. QQ peut-il m'aider SVP ?
Voilà ce que fait le prog :
Déclaration d'une fonction :
unsigned long ma_fct (long No, char **Nom);
char *Nom, *ptr;
main()
{
....
ptr= (char *)malloc(100 * sizeof (char));
ma_fct(1,&ptr);
...
}
Le progrmme s'arrete à l'appel de la fonction avec l'erreur :
(L'instruction à "0x00401c01" emploie l'adresse mémoire "0x000000000".La mémoire ne peut etre "written"
Merci beacoup
3 réponses
-
Salut, pourquoi as tu **?
. .
\_/ -
>"0x00401c01" emploie l'adresse mémoire "0x000000000".
Pointeur NULL...
Vérifie que l'allocation est effective
@++
Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ? -
Comme teebo, je te demanderai : pourquoi tu passes l'adresse du pointeur ?
C'est en général utile si tu veux que ce soit la fonction qui alloue l'espace mémoire pour le pointeur, mais là, tu le fais avant...
Ca va en plus etre malheureusement difficile de t'aider sans savoir un peu plus ce qu'est censée faire cette fonction.
@++
Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ?-
ma_fct ouvre une table (le premiere parametre est le numero de la table, le deuxieme est la variable qui recevera le nom de cette table que j'utilise dans la suite du programme). C'est tout ce que je sais sur cette fonction.
- Je pense donc que l'allocation doit se faire à l'intérieur : c'est pour cela que tu passes un pointeur sur ton pointeur.
Tu n'as donc pas besoin de faire l'allocation avant.
Ca n'explique cependant pas l'erreur : normalement si l'alloc se fait à l'intérieur, la mémoire aura simplement été allouée pour rien et perdue.
Met toujours le pointeur à NULL et n'alloue rien avant l'appel pour voir si ça change qqchose.
@++
Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ?
-