c - 用循环填充列表的问题 - C 语言
问题描述
我想在循环中填充结构列表,但似乎只使用对所用结构的最后引用来填充它。
这就是我实现列表的方式:
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
我认为指针存在问题,但我无法弄清楚。我该如何解决?
解决方案
推荐阅读
- python - 如何在python中获取单击和拖动事件的光标位置?
- php - Laravel - 控制器看不到图像输入
- python - 如何使用 python imaplib 阅读电子邮件
- f# - F# 中的尾递归程序
- php - 无法从 PHP 中的 AJAX 响应中获取数据
- node.js - 带节点的 Nginx 代理。在端口 80 上运行时奇怪的重写
- r - R中数据框中每行最大值的比率
- javascript - RxJs - 创建 Observable 的 Observable 数组的正确模式/方法是什么?
- r - nflscrapR 包的安装问题
- flutter - 如何在 Flutter 中共享卡片?