Связанный список с несколькими структурами - PullRequest
0 голосов
/ 11 июня 2018

Я новичок в связанном списке, и у меня не было проблем с использованием одной структуры со связанным списком.Однако, когда я попытался создать узлы, используя структуру "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);

}

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Доступ к queueHead->ppl вызывает seg fault.Проблема в том, что queueHead является указателем и должен указывать на допустимое расположение в памяти.

Таким образом, попробуйте:

Queue *queueHead = new Queue;

Также рассмотрите возможность использования класса интеллектуальных указателей, например std::unique_ptr для управления указателями / памятью.Вы уже забыли delete в своей программе (надеюсь, что это вас убедило).

0 голосов
/ 11 июня 2018

Вы не можете сделать это без предварительного выделения памяти для queueHead (который в вашем случае равен NULL):

queueHead->ppl = node;
queueHead->next = NULL;
...