【发布时间】:2015-04-29 03:05:30
【问题描述】:
family 对象包含一个 Person 对象的链表,因此,Family 类中有一个函数可以将 Person 对象插入到名为 people 的 ListedList 中。
我遇到了一些麻烦,即只有某些 Person 对象被添加到人员链接列表中。我省略了许多其他函数,因为我(希望)能够确定问题发生在 Family 类的 insertPerson() 函数中。
insertPacket() 中的 for 循环按预期循环遍历每个“Person”对象(请参阅注释的“cout”)。然而,事情在 if 语句中被打破了..
if (person_id < itr->get_person_id())
{
Person *psn = new Person(person_id, name);
people.insert(itr, *psn);
break;
}
如果person_id 小于链表中的get_person_id(),它会执行并将其插入到链表的开头,但如果不是,则完全跳过它...
【问题讨论】:
-
仍在阅读您的问题,但您可能应该修复内存泄漏,其中至少有三个。而且我看不到从
createPerson调用的insertPacket的实现。我只看到insertPerson。 -
我不完全确定你在问什么。您是说如果
person_id小于它添加的list中的任何人的ID,并且如果ID 不小于它“完全跳过它”。这似乎是您的代码正在做的事情,但您想让它做什么? -
insertPacket 的实现——我使用头文件来声明每个函数,为了简化,这里没有展示。你指的是这个吗?内存泄漏 - 如果您能指出我正确的方向,会很感激吗?目的是根据 person_id 以升序将人员对象插入到列表中。
-
不要简化代码是不可编译的,不能重现你的问题。 MCVE 的重点是重现您当前代码的不良行为,而需要最少量的代码来修复它。为此,除非问题非常明显,否则我们需要足够的代码来剪切、粘贴、编译和运行(最好是针对重现问题的数据样本)。当前的帖子不是 MCVE。关于您的内存泄漏,我在这段代码中没有看到需要
new。 -
@WhozCraig 谢谢让我跟上进度。我已经更新了代码以包含所有内容以及一些初始数据。我已将对象创建更改为自动内存。如果运行,您应该看到只有两个人被插入到家庭中,而不是预期的三个人..