问题描述
首先,这是我的代码,这是我的链表
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;
}