向链接列表添加数据的功能会陷入无限循环,只有有时

问题描述

首先,这是我的代码,这是我的链表

        typedef struct data
    {
    
        struct data *next;
        int value : 24;
    
    }dataTable;

这是我的功能

    void addData (int data){
    dataTable *dataPointer = NULL;
    if (dataTableHead == NULL){ /**create the head of the list if it doesn't exist*/
    
    dataTableHead = (dataTable *)malloc(sizeof(dataTable));
    dataPointer = dataTableHead;
    
    }

    else{/**if a data table exist (head exists)*/
        
        dataPointer = dataTableHead;
        
        while (dataPointer->next != NULL){/**gets the last link of the list*/
            dataPointer = dataPointer->next; 
        }

        dataPointer->next = (dataTable *)malloc(sizeof(dataTable));/**add a new symbol to the list*/
        dataPointer = dataPointer->next;
    }
    dataPointer->value = data;

}

那么发生的是,我在其他.c文件中具有加载文本文件功能,并且读取了它们的行,并且每当看到特定内容时,我都会将其放在链接列表中。

它完美地适用于1个文件,无论我对它做了什么(或至少对于我尝试过的事情),但是每当我尝试2个特定文件时,第二个文件都会在此函数中陷入无限循环,在else陈述中。

我知道我没有发送我拥有的所有代码,但是我的问题只是重新使用此函数,因为我试图弄清楚它已经有一段时间了,而且我不知道它怎么能使无限循环。因为datapointer永远是列表的头,这是我用来在链接列表中存储数据的唯一函数,据我所知,它不会创建任何无限的指针循环。 我做错了什么导致该功能无限循环?

是的,我100%确认循环来自addData函数

解决方法

使用通过malloc分配且未初始化的缓冲区的值会调用未定义的行为。 您应该初始化dataPointer->next

    }
    dataPointer->next = NULL; /* add this line */
    dataPointer->value = data;

}