用循环填充列表时出现问题-C语言

时间:2020-11-06 10:56:28

标签: c list loops

我想在循环中填充结构列表,但似乎只用对所使用结构的最后引用来填充它。

这是我实现列表的方式:

typedef struct message_r{
    struct timeval timestamp_s; 
    char g; 
    int x;
    struct timeval timestamp_a; 
}message_r;

typedef struct node {
    message_r* val;
    struct node * next;
} node_t;

node_t* inizialize_list(message_r* value){
    node_t * head = NULL;
    head = (node_t *) malloc(sizeof(node_t));
    if (head == NULL) {
        return (node_t *)1;
    }

    head->val = value;
    head->next = NULL;
    return head;
}

void push(node_t * head, message_r* val) {
    node_t * current = head;
    while (current->next != NULL) {
        current = current->next;
    }

    current->next = (node_t *) malloc(sizeof(node_t));
    current->next->val = val;
    current->next->next = NULL;
}

void print_list(node_t * head) {
    node_t * current = head;

    while (current != NULL) {
        printf("msg: x:%d  g:%c\n", current->val->x, current->val->g);
        current = current->next;
    }
}

这是我用于测试的主要内容:

#include "list.h"

int main(int argc, char* argv[]){

    message_r m;
    m.x = -1;
    m.g = '0';
    gettimeofday(&m.timestamp_s, NULL);
    gettimeofday(&m.timestamp_a, NULL);
    node_t* head = inizialize_list(&m);
    
    for(int i = 0; i< 10; i++){
        message_r m1;
        m1.x = i;
        m1.g ='g';
        gettimeofday(m1.timestamp_s, NULL);
        gettimeofday(m1.timestamp_a, NULL);
        push(head, &m1);
    }

    message_r m2;
    m2.x = 2;
    m2.g ='r';
    gettimeofday(&m2.timestamp_s, NULL);
    gettimeofday(&m2.timestamp_a, NULL);
    push(head, &m2);
    
    print_list(head);
}

我的预期结果是:

msg: x:-1  g:0
msg: x:0  g:g
msg: x:1  g:g
msg: x:2  g:g
msg: x:3  g:g
msg: x:4  g:g
msg: x:5  g:g
msg: x:6  g:g
msg: x:7  g:g
msg: x:8  g:g
msg: x:9  g:g
msg: x:2  g:r

但是我得到了

msg: x:-1  g:0
msg: x:9  g:g
msg: x:9  g:g
msg: x:9  g:g
msg: x:9  g:g
msg: x:9  g:g
msg: x:9  g:g
msg: x:9  g:g
msg: x:9  g:g
msg: x:9  g:g
msg: x:9  g:g
msg: x:2  g:r

我认为指针存在问题,但是我无法弄清楚。我该怎么解决?

0 个答案:

没有答案
相关问题