Я получаю ошибку сегментации при реализации структуры данных стека - PullRequest
0 голосов
/ 17 марта 2020

Я получаю ошибку сегментации в следующем фрагменте кода. Это код, который должен присваивать значения различным свойствам в торговой карте и отображать ее. Я обычно путаюсь в структурах данных, поэтому, если вы, ребята, можете, пожалуйста, предложить некоторые ресурсы, чтобы узнать о сбое сегментации и подобных вещах, которые были бы очень полезны.

#include<stdio.h>
#include<stdlib.h>

typedef struct cards
{
    int power;
    int energy;
    int heal;
    int karma;

    struct cards *next;
}node;

node *createCards()
{
    node *new_node=(node*)malloc(sizeof(node));

    new_node->energy=500+rand()%400;
    new_node->heal=100+rand()%200;
    new_node->karma=50+rand()%100;
    new_node->power=1000+rand()%501;

    return new_node;

}

void createStack(node *head, int no_cards)
{
    if(head==NULL)
        head=createCards();

    head->next=NULL;

    int i=0;

    while(i<no_cards-1)    
    {
        node *tmp=createCards();
        tmp->next=head;
        head=tmp;

        i++;
    }
}


void displayCards(node *head)
{
    node *crt=head;
    int i=1;

    while(crt->next)
    {
        printf("\n  ------------------------------------- ");
        printf("\n |                <%d>                 |", i);
        printf("\n |                                     |");
        printf("\n |   POWER :   %d                      |", crt->power);
        printf("\n |                                     |");
        printf("\n |                                     |");
        printf("\n |   ENERGY:   %d                      |", crt->energy);
        printf("\n |                                     |");
        printf("\n |                                     |");
        printf("\n |   HEAL  :   %d                      |", crt->heal);
        printf("\n |                                     |");
        printf("\n |                                     |");
        printf("\n |   KARMA :    %d                     |", crt->karma);
        printf("\n |                                     |");
        printf("\n  -------------------------------------");

        i++;
        crt=crt->next;
    }
}

node *player1=NULL;
int main()
{
    createStack(player1, 10);

    displayCards(player1);
}

1 Ответ

0 голосов
/ 17 марта 2020

Я подозреваю, что вы хотите написать функцию createStack(), например

void createStack (node *head, int no_cards) {
    if (head == NULL) {
        head = createCards();
    }

    int i = 0;
    node *tmp = head;

    while(i < no_cards) {
        tmp->next = createCards();
        tmp = tmp->next;
        i++;
    }
}

И я заметил, что вы создаете связанный список, а не стек. И удалите строку crt->next внизу, пока l oop в функции displayCards(). Спасибо, что спросили:)

PS Если у вас есть другие вопросы, оставляйте комментарии. Я отредактирую свой ответ, чтобы ответить на этот вопрос.

...