Int et void*
Résolu
mél
-
loupius -
loupius -
Bonjour,
j'ai un petit soucis . En fait j'ai une fonction generique de type :
void inserer(struct A,void * elem){}
et j'ai une fonction qui fait appel a celle la:
void inserer_entier(struct B, int elem){
void *tmp=(void *)elem;
inserer( B->deleg, elem);
}
mais ca ne marche pas.
erreur: transtypage vers un pointeur depuis un entier de taille différente
ma structure B est la suivante
struct B{
struct A->deleg
}
quelqun aurait il une solution svp
merci.(je travaille en c).
j'ai un petit soucis . En fait j'ai une fonction generique de type :
void inserer(struct A,void * elem){}
et j'ai une fonction qui fait appel a celle la:
void inserer_entier(struct B, int elem){
void *tmp=(void *)elem;
inserer( B->deleg, elem);
}
mais ca ne marche pas.
erreur: transtypage vers un pointeur depuis un entier de taille différente
ma structure B est la suivante
struct B{
struct A->deleg
}
quelqun aurait il une solution svp
merci.(je travaille en c).
A voir également:
- Int et void*
- Void(0); ✓ - Forum Mozilla Firefox
- Int converter - Télécharger - Bureautique
- Int input python - Forum Python
- Javascript void (o) error - Forum Windows
- Int(input()) signification - Forum Python
4 réponses
void inserer_entier (struct B, int elem)
{
void *tmp=(void *)elem;
inserer( B->deleg, elem);
}Evidemment 'elem' est un 'integer', tu ne peux le transformer en 'void*'; le propose:
void inserer_entier (struct B, int* elem)
{
inserer (B->deleg, (void*)elem);
}
merci j'ai finalement essayé ce que tu m'a dis je n'ai finalement plus cette erreur.
Par contre lorsque je test :
int main(void){
struct s=creer_struct_A();
int a;
*a=5;
int b;
*b=18;
inserer(s,a);
printf(){};//affiche le champs de la structure ou a a été affecté
inserer(s,b);
printf(){};
la première insertion se passe bien cependant la ligne (*a=18) génère une erreur de segmentation et je n'arrive pas comprendre pourquoi;
Par contre lorsque je test :
int main(void){
struct s=creer_struct_A();
int a;
*a=5;
int b;
*b=18;
inserer(s,a);
printf(){};//affiche le champs de la structure ou a a été affecté
inserer(s,b);
printf(){};
la première insertion se passe bien cependant la ligne (*a=18) génère une erreur de segmentation et je n'arrive pas comprendre pourquoi;
Salut,
(pour moi c'est un mystère).
L'opérateur unaire de déréférence * s'applique à un pointeur et il donne l'accès à l'objet pointé par le pointeur.
Dans ce cas int a, a n'est pas une pointeur mais une variable normale. Comme * ne peut être appliqué qu'à un pointeur, tu te rends compte que tu le savais déjà, donc il n'y a plus de mystère ;-))
Il suffit de l'appliquer au pointeur &a et ça marche
Mais bon, autant faire a=5
(pour moi c'est un mystère).
L'opérateur unaire de déréférence * s'applique à un pointeur et il donne l'accès à l'objet pointé par le pointeur.
Dans ce cas int a, a n'est pas une pointeur mais une variable normale. Comme * ne peut être appliqué qu'à un pointeur, tu te rends compte que tu le savais déjà, donc il n'y a plus de mystère ;-))
Il suffit de l'appliquer au pointeur &a et ça marche
lami20j@debian:~/trash$ cat int.c
#include<stdio.h>
int main()
{
int a;
*&a = 5;
printf("%d\n",a);
return 0;
}
lami20j@debian:~/trash$ gcc int.c
lami20j@debian:~/trash$ ./a.out
5
Mais bon, autant faire a=5
Salut,
Ce code :
int a;
*a=5;
ne doit pas passer à la compilation (à moins que le compilateur ne respecte pas la norme). Si tu veux que cela passe à la compilation, il faudra réaliser des casts. Attention tout de même à initialiser la variable "a" qui devra contenir une adresse.
Par exemple :
int a; //il manque toujours l'adresse stockée dans a.
*(int *)a=5;
Plus simple serait le code proposé par loupius
int *a;
*a=5;
qui passera la compilation. Mais cela provoquera une erreur de segmentation à l'exécution puisque la variable "a" ne contient toujours pas d'adresse.
Ce code :
int a;
*a=5;
ne doit pas passer à la compilation (à moins que le compilateur ne respecte pas la norme). Si tu veux que cela passe à la compilation, il faudra réaliser des casts. Attention tout de même à initialiser la variable "a" qui devra contenir une adresse.
Par exemple :
int a; //il manque toujours l'adresse stockée dans a.
*(int *)a=5;
Plus simple serait le code proposé par loupius
int *a;
*a=5;
qui passera la compilation. Mais cela provoquera une erreur de segmentation à l'exécution puisque la variable "a" ne contient toujours pas d'adresse.