【发布时间】:2015-04-24 15:53:06
【问题描述】:
我正在创建一个状态对象的链接列表,每个状态对象都包含一个居住在该状态中的常驻对象的链接列表。用户读入一个数据库文件,然后可以从一些命令中进行选择,例如寻找一个人、移动一个人或将两个状态合并为一个全新的状态。当我尝试合并 2 个州的人时,我必须创建一个新州,将所有人从第一个州的居民名单移动到新州的居民名单,并对第二个州的居民名单做同样的事情。然后,这些人应该出现在新州的居民名单中,而不是原州的居民名单中。我收到一堆错误:当我尝试合并时,我收到重复的空闲块警告;当用户尝试将新州的居民名单作为命令打印出来时,没有人被列出;此外,当用户尝试打印任一原始州的驻留列表时,会打印前几个,但随后出现设置错误,核心被转储,程序停止运行。任何帮助将不胜感激。
在我的列表对象中:
void addLink (Link <type> * data) {
if (first == NULL) {
first = data;
last = data;
}
else {
last->next = data;
last = data;
}
}
如果输入的命令是“合并”...
else if (cmd == "merge") {
string state1, state2, newstate;
cin >> state1 >> state2 >> newstate;
State * ns = state_ls->addLink(new State(newstate))->data;
Link <State*> * s1 = searchList(state1, state_ls);
Link <State*> * s2 = searchList(state2, state_ls);
List <Person*> people1 = s1->data->res_list;
List <Person*> people2 = s2->data->res_list;
List <Person*> newres_list = ns->res_list;
Link <Person*> * temp = people1.first;
while (temp != NULL) {
newres_list.addLink(temp);
temp = temp->next;
}
temp = people2.first;
while (temp != NULL) {
newres_list.addLink(temp);
temp = temp->next;
}
}
【问题讨论】:
-
您正在列表之间共享链接。当其中一个列表被销毁时,这很可能是一个问题。大量的指针表明您在生命周期管理方面存在更多问题。你有没有考虑过不要这么依赖指针?
-
大多数其他学生完成作业的方式是使用指针。指针对于链接是必不可少的,指向链接中数据(即我的人员和状态结构)的指针使许多早期的命令更容易测试和执行。但是,如果有特定的指针需要更改,请告诉我!
标签: c++ pointers merge linked-list segmentation-fault