Question en C (pointeur)

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

3 réponses

teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
Salut, pourquoi as tu **?

.  .
\_/
0
AbouSaid
 
Merci teebo pour ta réponse,
parce que:
Je dois faire un programme sous visual C++ et je n'ai pas les sources des fonctions mais que les headers et les dlls.
Je dois appeler donc cette fonction avec les parametres en question.
J'espère que j'ai été clair
Merci encore une fois
0
batmat Messages postés 1871 Date d'inscription   Statut Membre Dernière intervention   114
 
>"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 ?
0
AbouSaid
 
Avant d'appeler : ma_fct(1,&ptr), j'ai fait ceci :
if(ptr == NULL)
{
printf("\n\nERREUR : Attention Allocation memoire impossible !!! \n\n");
exit (1);
}
else
printf("\n\nAllocation memoire OK !!! \n\n");

Le programme m'affiche bien le message ci-dessus (...OK )
Merci
0
batmat Messages postés 1871 Date d'inscription   Statut Membre Dernière intervention   114
 
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 ?
0
AbouSaid
 
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.
0
batmat Messages postés 1871 Date d'inscription   Statut Membre Dernière intervention   114 > AbouSaid
 
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 ?
0
AbouSaid > batmat Messages postés 1871 Date d'inscription   Statut Membre Dernière intervention  
 
malheureusement, j'ai toujours la même erreur. C'est ce que j'avais fait au debut (sans allocation memoire) mais ça ne marchait pas.
0