添加多个患者C指针

时间:2013-11-29 04:20:53

标签: c pointers linked-list

我的指针遇到了麻烦。我正在尝试将多名患者添加到我的列表中。我知道怎么做,只是代码给了我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循环之后。我不知道哪个。谢谢你的帮助。

3 个答案:

答案 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;
 }