向链表添加数据的函数正在进入无限循环,只是有时

A function adding data to a linked list is enteting an infinite loop, only sometimes

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

        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 语句中。

我知道我没有发送我所有的代码,但我的问题只是重新考虑这个函数,因为我试图弄清楚它已经有一段时间了,但我什至不明白它是如何做到的做无限循环。因为,数据指针将永远是列表的头部,这是我用来在链表中存储数据的唯一函数,据我所知,它不会创建任何指针的无限循环。 我做错了什么导致这个函数无限循环?

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

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

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

}