c - 结构体和指针

标签 c pointers struct nodes

所以在我的代码中我有两个结构。第一个是一个节点,其中包含一个 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/

相关文章:

c - 结构数组与结构指针之间的表达式相等

C++:将 std::vector 的内容转换为对数组的引用

c - 错误 : Redefinition of union

c - 检测 C 中的空标记

C++ 遍历成员函数

swift - 访问结构变量的正确语法是什么?

Golang 嵌入式结构体类型

c - 在c中写一个函数指针

c - 用 C 编写的快速排序中的赛车条件与 OpenMP 并行

c++ - 这是初始化指针的正确方法吗?