salut![]()
je n'arrive pas à comprendre pourquoi ce code ne marche pas :
main()
{
void *p=malloc(4);*p=0x589859;
printf("%x \n",*p);
}
![]()
salut![]()
je n'arrive pas à comprendre pourquoi ce code ne marche pas :
main()
{
void *p=malloc(4);*p=0x589859;
printf("%x \n",*p);
}
![]()
ça ne marche...
c'est à dire ?
Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)
ça marche pas :
erreur de compilation![]()
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 utiliser
Code : Sélectionner tout - Visualiser dans une fenêtre à part (*(int*)p) = 0x589859;qu'un valeur fixe (portabilité)
Code : Sélectionner tout - Visualiser dans une fenêtre à part sizeof(int)
Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)
qu'est ce que vous voulez dire par valeur generique![]()
avec un type non définiEnvoyé par elghadi_mohamed
Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)
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 : Sélectionner tout - Visualiser dans une fenêtre à part int myfunc(void* param) { return param == NULL; }
en pratique, ça veut dire qu'on ne peut pas déréférencer un void*
Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)
Il y a pourtant de nombreuses raisons :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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?Envoyé par seriousme
Code : Sélectionner tout - Visualiser dans une fenêtre à part int* p_i = p;
A rien, c'est juste pour montrer comment déréférencer un pointeur générique en le castant.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.Envoyé par seriousme
J'ai rien comprisCeci 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.déréférencer un pointeur générique![]()
exemple bidon:Quel intérêt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void f(void* p,char* type){ if(strcmp(type,"int")){ p=(int*)p; } ...Le cast.Qu'est-ce qui est plus explicite ?
salut
Emmanuel Delahaye![]()
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![]()
En ce qui me concerne, le forum et éventuellement les mails privés (Envoyé par elghadi_mohamed
) suffiront...
Je suppose que tu veux direEnvoyé par seriousme
sinon, ça n'a aucun sens d'écrire x = x ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if(strcmp(type,"int") == 0) { int *pi = p;
Je pense qu'il voulait dire
Code : Sélectionner tout - Visualiser dans une fenêtre à part int i = *(int*)p;
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager