передавая связанный список и получить его значение - PullRequest
0 голосов
/ 20 июля 2011

Мне очень жаль за запутанный код, поэтому я пытаюсь изменить весь вопрос так, чтобы он звучал так:

Итак, в основном, у меня есть предопределенная структура, которую я получаю из файла заголовка, который я помещаю в один основной файл. Мне нужно создать функцию, которая может принимать значение value1-> identity в моей собственной функции.

Я не должен передавать значение1 в качестве параметра, так как я могу получить доступ к значению1 из пользовательской структуры. но как я могу сделать это в int funct (пользователь * пользователь), чтобы при выводе значения value1-> identity в int funct (пользователь * пользователь) он не возвращал мне значение мусора.

Спасибо

#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;
}

1 Ответ

1 голос
/ 20 июля 2011

Заметили ли вы, что вы не используете переменную user до конца funct?

Вы работаете с неинициализированными указателями. Вот почему вы получаете разные (все равно мусор) результаты. Вы должны исправить это в первую очередь.

Для начала:

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

Это не имеет никакого смысла. Нет chron_slot объекта для работы. Вам нужно либо выделить один с помощью malloc, либо использовать объект стека, пропустив нотацию указателя при объявлении chron_slot.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...