c - 传递链表并获取它的值

标签 c

我对令人困惑的代码感到非常抱歉,所以我试图改变整个问题,使其更简单:

基本上,我有一个从头文件中获取的预定义结构,并将其放入一个主文件中。 我需要创建一个函数,可以在我自己的函数中获取 value1->identity 的值。

我不应该将 value1 作为参数传递,因为我可以从用户结构访问 value1。 但是我如何在 int funct(user *user) 中执行此操作,以便当我在 int funct(user *user) 中打印 value1->identity 时,它不会返回垃圾值。

谢谢

#include <stdio.h>
#include <string.h>

typedef struct {
    int identity;
} value;

typedef struct list1_struct {
    value value1;
    struct list1_struct *next, *prev;
} list_t_slot;

typedef struct {
    list_t_slot *head, *tail;
} list_t;

typedef struct {
    int number;
    list_t value1s;
} value2;

typedef struct list2 {
    value2 conn;
    struct list2 *next, *prev;
} list_t_slot2;

typedef struct {
    list_t_slot2 *head, *tail;
} list_t2;

typedef struct {
    int power;
    list_t2 connections;
} user;

int funct(user *user) {

    return 1;
}

int main() {
    user user;
    memset(&user, 0, sizeof(user));

    list_t_slot2 chron_slot;
    memset(&chron_slot, 0, sizeof(chron_slot));
    value2 *conn = &chron_slot.conn;

    list_t_slot value1_slot;
    memset(&value1_slot, 0, sizeof(value1_slot));
    value *value1 = &value1_slot.value1;

    user.power = 1;
    value1->identity = 1;

    printf("value of identity is %d\n", value1->identity);

    funct(&user);

    return 1;
}

最佳答案

您是否注意到,直到 funct 结束才使用 user 变量?

您正在使用未初始化的指针。这就是为什么你会得到不同的(都同样是垃圾)结果。您必须先解决这个问题。

首先:

chron_apn_con_list_t_slot *chron_slot;
chron_apn_con_t *conn = &chron_slot->conn;

这没有任何意义。没有可使用的 chron_slot 对象。您需要使用 malloc 分配一个,或者通过在声明 chron_slot 时省略指针表示法来使用堆栈对象。

关于c - 传递链表并获取它的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6765159/

相关文章:

c++ - ucnv_open 错误 U_FILE_ACCESS_ERROR

c - 该函数如何工作!(n & 1),为什么! before () ,为什么是 n & 1 ,是什么意思?

c - 父子进程随机结束(linux,c,fork())

c++ - 在 Ubuntu 的 PATH 中找不到程序 "g++"

c - 指向结构体指针的指针

使用 char 数组检查用户在 C 中是否输入空字符串

c - 禁止指针和整数之间的比较

c - 如何使用句柄检索流程描述和公司名称?

c++ - 查看窗口是否有菜单栏

c - 为什么在执行特定的按位运算时,uint64_t 的高 32 位会变成 1?