2010-07-09 70 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])); 

由于某种原因,我得到分配输出问题上无效**

分配(应该是AA)

以下100 166696(应为100 100)

+0

这是真码吗?代码中至少有一个错误,它甚至不应该按原样编译。 – 2010-07-09 07:10:41

+0

a0 = malloc(sizeof(char *)); 真的吗? :) – claf 2010-07-09 07:12:37

回答

1

您应该将args [0]和args [1]转换为char **和int **。

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

当你把地址a0a1填入args时,你会得到一个双指针。当你计算你的输出时,你只需解除引用一次。有两种方法可以解决这个问题,以获得您想要的输出。您可以更改

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

args[0]=(void *)a0; 

,改变

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

args[1]=(void *)a1; 

使args包含单指针,您可以更改

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

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

和显示过程中改变

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

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

到双解引用args