将结构成员数组传递给C中的函数

时间:2016-12-19 11:29:26

标签: c arrays pointers struct

static void fill_array(int arr[], int count, int num)
{
    int i;
    for(i=0; i<count; i++)
    {
        arr[i] = num;
    }    
}

typedef struct
{
    int a[10];
} x;

int main(void) {
    x *x1;
    fill_array(x1->a, 10, 0);
}

尝试此操作时,我遇到运行时错误。有人可以帮忙解决这个问题吗? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

您没有为x分配任何内存:您的程序行为未定义

对于这个例子,你可以逃脱

x x1;
fill_array(x1.a, 10, 0);

即。使用x的自动存储时长。这是因为x1.a在传递给函数fill_array时会有效地衰减到指针。

答案 1 :(得分:1)

您尚未为x1分配内存。

int main(void) {
    x *x1 = malloc(sizeof(x));

    if(0 !=x1)
    {
        fill_array(x1->a, 10, 0);
        free(x1);
    }
}

答案 2 :(得分:-1)

您的运行时错误应该是segmentation fault

我可以看一下你的第一个诗人x *x1;

未分配,并且您正在尝试访问未分配的pointeur的内容,因此...段错误。

有2个解决方案。 使用本地内存x x1;声明您的结构 或分配