3

我正在尝试使用指针从存储到数组中的 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 %d\n",*d[i]);

    return count;

}

4

3 回答 3

2

您拥有的是指向数组的指针,而不是指针数组。

1)malloc返回一个 void* 所以你需要将结果分配给*d而不是d

2)你想要的数据大小是一个int,而不是一个int*(使用*d让你int*知道 where**d是一个 int)

*d = malloc(sizeof(**d) * count);

3) 索引数组需要稍微不同的语法

(*d)[i] = val;

printf("%d\n", (*d)[i]);

4)第二个scanf需要一个指针,而不是一个int

scanf("%d", &val);
于 2013-01-18T00:27:25.693 回答
2
*d = malloc(count * sizeof(int));

然后

(*d)[i] = val
于 2013-01-18T00:28:20.310 回答
2

内存应按如下方式分配

*d = malloc(count * sizeof **d);

应按如下方式访问这些值

(*d)[i] = val;

也不清楚为什么要分配count元素并仅在输入周期中初始化count - 1元素(然后count在输出周期中打印所有元素)。

于 2013-01-18T00:35:42.653 回答