2010-07-09 3 views
0
int size=2; 
char *a0; 
char **allargs; 
short *a1; 
void **args; 
allargs=(char **)malloc(size*sizeof(char *)); 
allargs[0]="a"; 
allargs[1]="100"; 
args=(void **)malloc(size*sizeof(void *)); 

a0 = malloc(sizeof(char *)); 
*a0=(*allargs[0]); 
args[0]=(void *)&a0; 
fprintf(stderr,"assigned %c %c\n",*a0,*((char *)args[0])); 

a1 = malloc(sizeof(short *)); 
*a1=atoi(allargs[1]); 
args[1]=(void *)&a1; 
fprintf(stderr,"assigned %d %d \n",*a1,*((int *)args[1])); 

pour une raison quelconque, je reçois ce qui suit pour la sortieQuestion sur vide **

attribué un (doit être aa)

attribué 100 166696 (doit être 100 100)

+0

Est-ce le vrai code? Vous avez au moins une erreur dans le code de sorte qu'il ne devrait même pas compiler comme il est. –

+0

a0 = malloc (sizeof (char *)); vraiment? :) – claf

Répondre

1

Vous devez convertir args [0] et args [1] en char ** et int **.

fprintf(stderr,"assigned %c %c\n",*a0,**((char **)args[0])); 
fprintf(stderr,"assigned %d %d \n",*a1,**((int **)args[1])); 
0

Lorsque vous prenez l'adresse a0 et a1 pour remplir args, vous obtenez un double pointeur. Lorsque vous calculez votre sortie, vous ne faites que déréférencer une fois. Il existe deux façons de résoudre ce problème pour obtenir la sortie souhaitée. Vous pouvez modifier

args[0]=(void *)&a0; 

à

args[0]=(void *)a0; 

et changer

args[1]=(void *)&a1; 

à

args[1]=(void *)a1; 

de sorte que args contient un seul pointeurs, OU vous pouvez changer

fprintf(stderr,"assigned %c %c\n",*a0,*((char *)args[0])); 

à

fprintf(stderr,"assigned %c %c\n",*a0,**((char **)args[0])); 

et changer

fprintf(stderr,"assigned %d %d \n",*a1,*((int *)args[1])); 

à

fprintf(stderr,"assigned %d %d \n",*a1,**((int **)args[1])); 

à double déréférencement args lors de l'affichage.