尝试添加到链表时使用 Valgrind 进行无限“信号 11 被丢弃”循环

Posted

技术标签:

【中文标题】尝试添加到链表时使用 Valgrind 进行无限“信号 11 被丢弃”循环【英文标题】:Infinite "Signal 11 being dropped" loop with Valgrind while trying to add to linked list 【发布时间】:2014-09-23 01:44:20 【问题描述】:

我正在尝试在 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 中的列表遍历,但我不确定我做错了什么。

谢谢!

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于尝试添加到链表时使用 Valgrind 进行无限“信号 11 被丢弃”循环的主要内容,如果未能解决你的问题,请参考以下文章

在搜索现有成员的链表时返回布尔结果 - java

如何将一堆数据添加到链表中

从尾到头打印链表

如何使用 += 运算符将字符添加到链表?

构造链表时的无限循环

如何将对象添加到链表中?