Я пытаюсь проверить и проверить, заполнен ли головной узел связанного списка правильным значением. Однако указатель, который указывает на этот головной узел, был инициализирован в другом связанном списке с использованием malloc, поэтому теперь значением точки является отрицательное число мусора, но оно не равно NULL, поэтому проверяется, не является ли указатель пустым. Попытка получить доступ к этому местоположению приводит к нарушению памяти. Как я могу проверить, действительно ли я когда-либо назначал этот указатель чему-либо, если, кажется, malloc сначала дает ему какое-то случайное значение?
Соответствующие определения структуры:
struct patient {
char name[MAX_NAME];
unsigned int roomNumber;
struct doctor *doctors; // linked list 'doctors' contains names of doctors
};
// structure 'doctor' contains doctor's name
struct doctor {
char name[MAX_NAME];
struct doctor *next;
};
Инициализация и добавление пациентов:
void addPatient(char* patientNameInput, unsigned int roomNumInput)
{
// Creating and initializing the patient:
struct patientList *l;
struct patient *p;
p = (struct patient *) malloc(sizeof(struct patient)); // allocating memory safely
l = (struct patientList *) malloc(sizeof(struct patientList));
. . .
Код, о котором идет речь:
void displayList(struct patientList* tempList)
{
while (tempList) {
printf("\nPatient name: %s\n", tempList->patient->name);
printf("Room number: %i\n", tempList->patient->roomNumber);
printf("Problem pointer: %i", tempList->patient->doctors); // this will always print a garbage value
// Doctor stuff
if (!tempList->patient->doctors) { // Always fails.
printf("Doctors: N/A\n");
}
else {
printf("Doctors: "); // this is the last thing to be displayed, before throwing a memory access violation exception
struct doctor* dList = tempList->patient->doctors; // temp doc list
while (dList->name) {
printf("%s\n", dList->name);
dList = dList->next;
}
}
tempList = tempList->next;
}
}
Строка с пометкой «Всегда терпит неудачу» - это точка, в которой я хочу проверить, действительно ли здесь был назначен тип врача, в отличие от значения мусора, которое он печатает. Приношу свои извинения, если эта ошибка невероятно проста.