C数组指针和malloc

时间:2013-01-18 00:22:01

标签: c pointers malloc

我正在尝试使用指针将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;

}

3 个答案:

答案 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元素)。