如何解决我可以对来自不同类的对象进行分组的方式有哪些?
我对C ++比较陌生,自从上大学课程以来,我已经练习了一个月,我想扩展自己的知识并尽可能多地学习,以便编写出色的代码。我们有一个任务,我们应该创建三个类,在第三类中,我们应该编写第二类的对象并对其进行分组,然后对它们进行处理,换句话说,我们被要求创建一个名为pilot的类。 ,飞机,然后是由飞机组成的机队。老师们给出了这个解决方案,与我的设想相去甚远,看看:
class Fleet {
private:
struct PlaneList {
Plane* p;
PlaneList* next;
PlaneList* node = nullptr,*next_node = nullptr;
public:
void PlaneAdd(Plane* current) {
if (node == nullptr) {
node = new PlaneList;
node->p = current;
node->next = nullptr;
next_node = node;
}
else next_node->next = new PlaneList;
next_node = node->next;
next_node->p = current;
next_node->next = nullptr;
}
};
现在,据我所知,我们创建了一个包含指针的列表,这些指针指向另一个类中的共同响应平面?另外,内存分配是很奇怪的,我不太了解,当我将此代码粘贴到MSVC中时,程序可以编译,但崩溃,并显示以下消息:next_node = node-> next;是NULLPTR且有访问冲突?为什么会出现此错误? 我完全感到困惑,如果您能向我解释一下,我将不胜感激。另外,我读到使用列表会严重影响性能,而使用向量等东西则效率更高。
解决方法
让我们使用您的PlaneAdd
函数并将其重新格式化:
void PlaneAdd(Plane* current) {
if (node == nullptr) {
node = new PlaneList;
node->p = current;
node->next = nullptr;
next_node = node;
}
else {
next_node->next = new PlaneList;
}
next_node = node->next;
next_node->p = current;
next_node->next = nullptr;
}
现在我们可以很容易地看到最后三个语句不属于else
的一部分。
因此,当node == nullptr
为true
时,执行这些语句时node->next
将为空指针。而您要做的第一件事是next_node = node->next
,它也将next_node
变成了空指针。这意味着下一条语句将取消引用该空指针,并导致未定义行为和可能的崩溃。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。