У меня возникла эта странная ошибка сегментации. Я пытаюсь найти, если идентификатор пациентов уже существует в списке пациентов с помощью указателей. Я думаю, что данный код:C Указания на сегментацию Fault
#include <stdio.h>
#include <stdlib.h>
#include "health.h"
void addPatient(int patientID) {
printf("here1");
Chart* patients_chart;
// find the patient with id
patients_chart = patientList;
while(patients_chart == NULL || patients_chart->id == patientID) {
patients_chart = patients_chart->next;
printf("here2");
}
printf("here3");
// if patient wasn't found, add new patient
if (patients_chart == NULL) {
Chart *new_chart;
printf("here4");
// allocate and initialize new patient
new_chart = (Chart*)malloc(sizeof(Chart));
new_chart->id = patientID;
new_chart->buffer = NULL;
// insert new patient into list
new_chart->next = patientList;
patientList = new_chart;
printf("here5");
}
}
Включенный health.h - это только декларации и структуры методов. Я перечислил их ниже, но учтите, что мое назначение ограничивает меня модификацией какого-либо кода в health.h. Я также отправлю свой код в самом конце.
/*
* 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;
я вызвать функцию в основном с входом как этот: 1,12: 12: 12,7,0
7-является "команда"
1 является пациентом id
Вы можете игнорировать остальные.
Я понимаю, как найти пациента, но я получаю эту неприятную сегрегатную ошибку. Спасибо за ваше время!
В какой момент у вас есть segfault? Условие поиска вашего поиска не выглядит точным. – rano
[Пожалуйста, не указывайте возвращаемое значение 'malloc()' in C] (http://stackoverflow.com/a/605858/28169). – unwind
@unwind большое вам спасибо! Вы только что доказали свой проф. в некоторой степени. – user3043594