salut :D
je n'arrive pas à comprendre pourquoi ce code ne marche pas :
main()
{
void *p=malloc(4);*p=0x589859;
printf("%x \n",*p);
}
:roll:
Version imprimable
salut :D
je n'arrive pas à comprendre pourquoi ce code ne marche pas :
main()
{
void *p=malloc(4);*p=0x589859;
printf("%x \n",*p);
}
:roll:
ça ne marche...
c'est à dire ?
ça marche pas :
erreur de compilation :aie:
les pointeurs void ne sont là que pour des valeurs totalement génériques, il te faut faire un cast dessus avec d'accèder à l'objet pointé.
exemple :de plus tu ne vérifies pas si ton malloc échoue ou non, et tu devrais plutôt utiliserCode:(*(int*)p) = 0x589859;
qu'un valeur fixe (portabilité)Code:sizeof(int)
qu'est ce que vous voulez dire par valeur generique 8O
avec un type non définiCitation:
Envoyé par elghadi_mohamed
avec un type non défini
à titre d'exemple ???
avec un type non définie, ça veut dire que tu ne connais pas le type de tes données.
tu n'as pas besoin de savoir le type des données de ton pointeur pour faire ça...Code:int myfunc(void* param) { return param == NULL; }
en pratique, ça veut dire qu'on ne peut pas déréférencer un void*
Il y a pourtant de nombreuses raisons :Citation:
Envoyé par elghadi_mohamed
- Pas de type retour explicite à main()
- Pas de prototype pour malloc()
- Pas de test de p avant usage.
- p n'est pas typé. Il ne peut donc pas être déréférencé.
- Pas de valeur explicite retournée
Code:
1
2
3
4 void *p=malloc(4); int* p_i=(int*)p; *p_i=0x589859; printf("%x \n",*p_i);
A quoi sert ce cast ?Citation:
Envoyé par seriousme
Code:int* p_i = p;
A rien, c'est juste pour montrer comment déréférencer un pointeur générique en le castant.Citation:
Envoyé par Emmanuel Delahaye
Ceci ayant de l'intérêt pour une fonction générique.
C'est plus explicite.
Tu n'as rien fait de tel. Tu as défini un pointeur typé et tu lui as donné la valeur d'un pointeur non typé, ce qui est tout à fait possible en C sans aucun cast.Citation:
Envoyé par seriousme
J'ai rien comprisCitation:
Ceci ayant de l'intérêt pour une fonction générique.
C'est plus explicite.
- Quel intérêt
- Qu'est-ce qui est plus explicite ?
L'expression est en effet trés mal choisit.:aie:Citation:
déréférencer un pointeur générique
exemple bidon:Citation:
Quel intérêt
Code:
1
2
3
4
5 void f(void* p,char* type){ if(strcmp(type,"int")){ p=(int*)p; } ...
Le cast.Citation:
Qu'est-ce qui est plus explicite ?
salut
Emmanuel Delahaye :king:
j'etais tres emus par vos reponses
est ce que vous pouvez me communiquer votre adresse MSN ou HOTMAIL ou votre pseudo SKYPE pour echanger les inform...
mon MSN est elghadi_mohamed@hotmail.com :D
En ce qui me concerne, le forum et éventuellement les mails privés (http://www.developpez.net/forums/ima...ons/sendpm.gif) suffiront...Citation:
Envoyé par elghadi_mohamed
Je suppose que tu veux direCitation:
Envoyé par seriousme
sinon, ça n'a aucun sens d'écrire x = x ...Code:
1
2
3 if(strcmp(type,"int") == 0) { int *pi = (int*) p;
Mais ça peux s'écrire :
Ce qui est tout aussi clair (et plus facile à maintenir...)Code:
1
2
3 if(strcmp(type,"int") == 0) { int *pi = p;
Je pense qu'il voulait dire
Code:int i = *(int*)p;