gpt4 book ai didi

c - 尝试添加到链表时使用 Valgrind 无限循环 "Signal 11 being dropped"

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:00 25 4
gpt4 key购买 nike

我试图在 C 中创建一个简单的单链表,但在 Valgrind 中运行我的程序时遇到了无限循环“Singal 11 being dropped”。

我的 .h 文件:

#ifndef TEST_H
#define TEST_H

struct fruit {
char name[20];
};

struct node {
struct fruit * data;
struct node * next;
};

struct list {
struct node * header;
unsigned count;
};

#endif

我的 .c 文件:

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

void init_list(struct list my_list)
{
my_list.header = NULL;
my_list.count = 0;
}

void add_to_list(struct list my_list, struct fruit my_fruit)
{
struct node my_node;
struct node nav_node;

my_node.data = &my_fruit;
my_node.next = NULL;

if(my_list.count == 0) { /* set head node if list is empty */
my_list.header = &my_node;
my_list.count++;
} else {
nav_node = *my_list.header;

while (nav_node.next != NULL) { /* traverse list until end */
nav_node = *nav_node.next;
}

nav_node.next = &my_node;

my_list.count++;
}

}

int main()
{
struct fruit fruit_array[5];
struct list fruit_list;
int i;

strcpy(fruit_array[0].name, "Apple");
strcpy(fruit_array[1].name, "Mango");
strcpy(fruit_array[2].name, "Banana");
strcpy(fruit_array[3].name, "Pear");
strcpy(fruit_array[4].name, "Orange");

init_list(fruit_list);

for(i=0; i < 5; i++) {
add_to_list(fruit_list, fruit_array[i]);
}

return 0;
}

我假设问题源于我在 add_to_list 中的列表遍历,但我不确定我做错了什么。

谢谢!

最佳答案

您正在按值将结构传递给函数。这将在函数中创建结构的副本,并且不会在调用函数中的结构上发生对该副本的更改。

您应该阅读您最喜欢的 C 语言书籍中有关指针的内容。

关于c - 尝试添加到链表时使用 Valgrind 无限循环 "Signal 11 being dropped",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25985617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com