我正在尝试使用指针将std中的数据存储到数组中。主要声明为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 %d\n",*d[i]);
return count;
}
答案 0 :(得分:2)
你所拥有的是一个指向数组的指针,而不是一个指针数组。
1)malloc
返回空格*,因此您需要将结果分配给*d
而不是d
2)您想要的数据大小为int
,而不是int*
(使用*d
可以获得int*
,其中**d
是一个整数)
*d = malloc(sizeof(**d) * count);
3)索引数组需要稍微不同的语法
(*d)[i] = val;
printf("%d\n", (*d)[i]);
4)第二个scanf需要一个指针,而不是一个int
scanf("%d", &val);
答案 1 :(得分:2)
*d = malloc(count * sizeof(int));
然后
(*d)[i] = val
答案 2 :(得分:2)
应按如下方式分配内存
*d = malloc(count * sizeof **d);
应按如下方式访问这些值
(*d)[i] = val;
还不清楚为什么要在输入周期中分配count
元素并仅初始化count - 1
元素(以后再打印输出周期中的所有count
元素)。