提问人:guerro 提问时间:10/7/2023 更新时间:10/8/2023 访问量:48
对象列表的分段错误问题
Segmentation fault problem with object lists
问:
我正在做一个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 ();
};
但是在级别 .cpp 中,当我在列表中创建平台对象时,我有分段错误:
this->platforms->plat = new platform (0, 1, COLS, 0);
这一行给了我分割错误,我试着用不同的方式写它,这样:
platform plt = platform (0, 1, COLS, 0);
this->platforms->plat = &plt ;
但这行不通。你能帮帮我吗?谢谢
答:
1赞
TanyacShiv
10/7/2023
#1
您遇到的分段问题很可能是由于访问未正确分配的内存引起的。您正在尝试在代码中设置一个值,但似乎尚未为 分配内存。this->platforms->plat
this->platforms
您可以尝试使用平台成员的关卡构造函数的以下修订代码:
level::level(int nl, bulletManager* bM) : nlevel(nl), platforms(nullptr) {
}
构建新平台时,必须为其动态分配内存并更新平台列表。
评论
Pplatform
level::platforms
this->platforms->plat = &plt ;
请记住,the 获取局部变量的地址,但不会以任何方式延长其生存期。当超出范围时,将指向无效地址。&
plt
this->platforms->plat
platforms
this->platforms->plat = anylocation
anylocation