所以在我的代码中我有两个结构。第一个是一个节点,其中包含一个 int 值和一个指向另一个节点的指针。第二个结构用于创建一个由 10 个指针组成的数组,每个指针都指向另一个节点。它还包含 link2 ,它将用于遍历数组及其指向的所有节点。我试图将 3 个节点添加到数组的第三个索引中,每个节点都保存值 3。第三个索引中的指针应指向前 3 个,然后指向后 3 个,依此类推。当我输入 add(a,3) 三次然后打印时,出现段错误。我尝试跟踪代码,但这对我来说仍然没有任何意义,因为我总是得到三个节点。有人可以指出我的某个方向吗?谢谢!:)/>
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
struct node
{
int x;
struct node *link;
};
struct listofnodes
{
struct node *alist[10];
struct node *link2;
};
addFirst(struct listofnodes *a, int num)
{
struct node *nodeone = (struct node *)malloc(sizeof(struct node));
nodeone->x = num;
a->alist[num] = nodeone;
// printf("IT WENT THROUGH\n");
}
add(struct listofnodes *a, int num)
{
struct node *current;
current = a->alist[3];
struct node *nodeone = (struct node *)malloc(sizeof(struct node));
nodeone->x = num;
current->x = 5;
{
while (a->alist[3] != NULL)
{
if (a->alist[3]->link == NULL)
{
a->alist[3]->link = nodeone;
printf("IT WENT THROUGH\n");
break;
}
a->alist[3] = a->alist[3]->link;
}
}
}
main(void)
{
struct listofnodes *a =
(struct listofnodes *)malloc(sizeof(struct listofnodes));
// a->alist[3]=NULL;
addFirst(a, 3);
add(a, 3);
add(a, 3);
add(a, 5);
}
最佳答案
在你的 main() 函数中,你有:
struct listofnodes *a =
(struct listofnodes *)malloc(sizeof(struct listofnodes));
“a”现在是指向包含随机位置的节点列表大小的内存块的指针。您可能想做类似的事情
a->link2 = NULL;
另外,在你的 add() 函数中,你有......
add(struct listofnodes *a, int num)
{
struct node *current;
current = a->alist[3];
struct node *nodeone = (struct node *)malloc(sizeof(struct node));
nodeone->x = num;
你有 malloc()d 随机内存并将“num”放入 x 中,但你需要将 null 放入“link”所在的位置,即
nodeone->link = NULL;
当您使用 malloc() 创建内存块时,您必须手动确保“link”成员设置为 NULL - 否则上次使用留下的数字将指向谁知道在哪里......
关于c - 结构体和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18818988/