对象列表的分段错误问题

问题描述 投票:0回答:1

我正在做一个C++项目,一个非常简单的视频游戏。这个游戏必须有无限的关卡,每个关卡都有随机数量的平台。 我为平台创建了一个对象,这里是 hpp:

class platform {
protected:
    hitBox box;
public:
    platform (int a, int b, int c, int d);
    void print();
    hitBox getHitbox();
};

还有一个关卡对象,其中包含平台列表,因为每个关卡的平台数量都可能发生变化,这里是 hpp:

struct Pplatform {
    platform* plat;
    Pplatform* next;
};
typedef Pplatform* lPlatform;

hitBox newRandomPlat (hitBox where);

class level {
protected:
    int nlevel;                
    lPlatform platforms;           
public:
    level (int nl, bulletManager* bM);
    void print_platforms ();
    infoCrash check (hitBox ht, char d);  
    int lnumber ();                       
};

但是在 level.cpp 中,当我在列表中创建平台对象时,出现分段错误错误:

this->platforms->plat = new platform (0, 1, COLS, 0);

这行给了我分段错误,我尝试以不同的方式编写它,如下所示:

platform plt = platform (0, 1, COLS, 0);
this->platforms->plat = &plt ;

但它不起作用。你能帮我吗?谢谢

c++ list object pointers segmentation-fault
1个回答
0
投票

您遇到的分段问题很可能是由于访问未正确分配的内存引起的。您尝试在代码中为 this->platforms->plat 设置一个值,但似乎尚未为 this->platforms 分配内存。 您可以尝试使用平台成员的关卡构造函数的修改代码:

level::level(int nl,bulletManager * bM):nlevel(nl),平台(nullptr){

} 当您构建新平台时,必须为其动态分配内存并更新平台列表。

© www.soinside.com 2019 - 2024. All rights reserved.