如何根据给定的地址初始化结构?

时间:2016-04-30 07:32:59

标签: c pointers struct

我正在使用C语言。 我有一个指针,我想创建一个以地址开头的新结构。这是我的方法,我可以通过编译,但当我运行它时,它会收到总线错误和段错误。

struct node{
    int value;
    int value2
    struct node *next;
}

int main(){
    struct node a = {0, 0, NULL};
    void *p = (void*)(&a + 1);
    struct node *ptr = (struct node *)(p);
    //These two statements below cause the problem.
    (*ptr).value = 100;
    (*ptr).next = NULL;
}

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

在您的代码中p指向一个传递a地址的内存位置,这是一个整数,无论​​如何都是未定义的行为。

你想要的是分配内存,例如:

struct node *ptr = malloc(sizeof *ptr);

ptr->value = 100;
ptr->next = NULL;

答案 1 :(得分:1)

试试这个,假设你只能使用静态定义的内存并想要一个链表:

struct node{
    int value;
    int value2
    struct node *next;
};

#define LEN 10
static struct node arr[LEN] = {0};

int main(){
    // Initialize the array of nodes
    for (int i = 0; i < LEN; i++) {
       struct node * const ptr = &a[i];
       ptr->value = 100;
       ptr->next = (i == (LEN-1)) ? NULL : &a[i+1];
    }
}