Я новичок в связанном списке, и у меня не было проблем с использованием одной структуры со связанным списком. Однако, когда я попытался создать узлы с помощью структуры «people» и связать их вместе с помощью другой структуры «Queue», я получил ошибку сегментации. Может ли кто-нибудь взглянуть, что не так в моем коде с двойными структурами?
enum Name{Ashley, Peter, Mike, Bill, Chris, Kate, Marry};
struct people{
Name name;
double height;
int weight;
};
struct Queue{
people* ppl;
int data;
Queue* next;
};
void print(Queue * queueHead){
Queue * traverse = queueHead;
while(traverse!=NULL){
cout << "height " << traverse->ppl->height << endl;
traverse = traverse->next;
}
}
int main(){
Queue * queueHead = NULL;
people * node = new people;
node->name = Ashley;
node->height = 5.5;
node->weight = 125;
queueHead->ppl = node;
queueHead->next = NULL;
node=NULL;
print(queueHead);
}





Вы не можете сделать это без предварительного выделения памяти для queueHead (который в вашем случае равен NULL):
queueHead->ppl = node;
queueHead->next = NULL;
О да, спасибо. Я думал, что объявление его равным NULL будет работать как выделение памяти.
Доступ к queueHead->ppl вызывает seg fault. Проблема в том, что queueHead является указателем и должен указывать на действительную ячейку памяти.
Таким образом попробуйте:
Queue *queueHead = new Queue;
Также рассмотрите возможность использования класса интеллектуального указателя, например. std::unique_ptr для управления указателями / памятью. Вы уже забыли delete в своей программе (надеюсь, что это вас убедило).
Спасибо, я понял. Это необходимо для удаления указателя, если я уже установил node = NULL?
@FannyZhang Да, вам нужно соединить все new и delete
Разыменование нулевого указателя похоже на архетип ошибок сегментации.