向链表添加数据的函数正在进入无限循环,只是有时
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;
}
首先,这是我的代码,这是我的链表
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;
}