我正在尝试使用指针将std中的数据存储到数组中。main声明d为int *d;
,函数使用x = getdata(&d);
调用。当我用gdb遍历它时,它在for循环的第一次迭代时死亡,当它尝试*d[I]=val时;
int getdata(int **d)
{
int count,val,i,j=0;
scanf("%d", &count);
d = malloc(sizeof *d * count);
for( i = 0; i < count-1; i++) {
scanf("%d",val);
*d[i]=val;
}
for ( i = 0; i < count; i++)
printf("Number %dn",*d[i]);
return count;
}
内存的分配应如下所示
*d = malloc(count * sizeof **d);
应按照以下访问这些值
(*d)[i] = val;
也不清楚为什么分配count
元素,而只在输入周期中初始化count - 1
元素(然后在输出周期中打印所有count
元素(。
*d = malloc(count * sizeof(int));
然后
(*d)[i] = val
您拥有的是指向数组的指针,而不是指针数组。
1( malloc
返回一个void*,因此需要将结果分配给*d
而不是d
2( 您想要的数据大小是int
,而不是int*
(使用*d
可以得到int*
,其中**d
是int(
*d = malloc(sizeof(**d) * count);
3( 索引数组需要稍微不同的语法
(*d)[i] = val;
printf("%dn", (*d)[i]);
4( 第二次扫描需要指针,而不是int
scanf("%d", &val);