我的指针遇到了麻烦。我正在尝试将多名患者添加到我的列表中。我知道怎么做,只是代码给了我seg错误。
以下是相关代码:
void addPatient(int patientID) {
Chartptr patients_chart;
patients_chart = getChart(patientID);
// if patient wasn't found, add new patient
if (patients_chart == NULL) {
Chartptr new_chart;
// allocate and initialize new patient
new_chart = (Chartptr)malloc(sizeof(Chart));
new_chart->id = patientID;
new_chart->buffer = NULL;
// insert new patient into list
new_chart->next = patientList;
patientList = new_chart;
// test print patient data
printf("%d %d\n", new_chart->id, patientList->id);
}
}
/*
* getChart: given a patientID, return a pointer to their Chart
*/
Chartptr getChart(int patientID) {
Chartptr foundChart = NULL;
// find the patient chart with id
foundChart = patientList;
if (foundChart != NULL) {
while(foundChart->id != patientID) {
foundChart = foundChart->next;
}
}
return foundChart;
}
以下是结构:
/*
* Patient's health chart: ID + linked list of health type readings
*/
typedef struct chartEntry* Chartptr; /* pointer to a Chart */
typedef struct chartEntry{
int id; /* patient ID */
CBuffptr buffer; /* pointer to first health type buffer */
Chartptr next; /* pointer to next patient */
}Chart;
extern Chartptr patientList; /* global declaration for start of the patient chart linked list */
我正在发送添加患者身份证,这是我从主要人那里得到的,我知道这很有效。 但是出于某种原因,当patientList不是NULL并且它进入while循环时,它会在addPatient的其余部分中出现故障或者在while循环之后。我不知道哪个。谢谢你的帮助。
答案 0 :(得分:1)
我认为这是你的错误:
while(foundChart->id != patientID) {
foundChart = foundChart->next;
您正在更新foundChart
,但如果while
已成为NULL
,则永远不会检查patientID
圈。
答案 1 :(得分:1)
getChart()
没有条件阻止它在列表末尾运行。
答案 2 :(得分:0)
请更新下面给出的代码:D
Chartptr getChart(int patientID) {
Chartptr foundChart = NULL;
// find the patient chart with id
foundChart = patientList;
while(foundChart!= NULL) {
if(foundChart->id == patientID) {
return foundChart;
}
foundChart = foundChart->next;
}
return NULL;
}