我正在使用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;
}
有人可以帮助我吗?
答案 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];
}
}