【问题标题】:Segmentation Fault after accessing node访问节点后出现分段错误
【发布时间】:2019-12-06 15:58:04
【问题描述】:

我正在尝试使用链表制作一副随机的纸牌。但是,每当我尝试使用我的 addCard 函数时,我都会收到分段错误错误。

是 temp->card->suit=suits;更改节点内节点值的正确方法?我想这就是我的问题所在。

谢谢!

struct Card{//card node
    char suit;
    int value;
};

struct BagNode{//bag node
    Card* card;
    BagNode *next;
};

class Bag{
  private:
    BagNode *head, *tail;
  public:
    int size;
    void addCard(char suits, int values){//adds card to end of deck
            BagNode *temp=new BagNode;
            temp->card->suit=suits;
            temp->card->value=values;
            temp->next=head;
            head=temp;
    }

};

int main(){
    Bag deck;
    deck.addCard('H',10);
}

【问题讨论】:

  • 您还必须分配Card
  • BagNode 的成员变量card 是一个指针,您必须使用new 手动分配它。您可以在 BagNode 构造函数中执行此操作,但请确保您也在析构函数中 free 它。
  • @Pesho_T 请不要在 cmets 中回答
  • @CoderCharmander 也

标签: c++


【解决方案1】:

当您第一次使用 BagNode *temp=new BagNode 创建新的 BagNode 时,您不会初始化 cardnext 成员变量。尝试访问 temp->card->suits 会导致段错误,因为您在定义卡本身之前尝试访问 card 的成员变量。

试试这个:

BagNode *temp=new BagNode;
temp->card = new Card();
temp->card->suit=suits;
temp->card->value=values;
temp->next=head;
head=temp;

【讨论】:

  • 我认为它首先不需要动态分配。应该只是一个值。节点没有价值有意义吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-31
  • 2018-03-10
  • 2021-03-21
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多