这个原型:
void split_list(Poly& list1, Poly& list2);
Poly是指向typedef结构的typedef
然后我有实际的功能:
void split_list(Poly* plist1, Poly* plist2){
Poly l1 = *plist1;
Poly l2 = *plist1;
Poly* pp = &l1
/*code does stuff w/ the l1 and l2 don't think the specifics are relevant to my
question*/
l2 = *pp;
(*pp) = 0;
*plist1 = l1;
*plist2 = l2;
}
我的问题是为什么我们设置l1&在函数开头的l2到* plist1然后在最后设置* plist1 = l1和* plist2 = l2?因为当我这样做时:
Poly l1;
Poly l2;
我得到一个分段错误,从我收集到的内容我们通过引用传入,并且参数需要在函数内分配给它们的值。我觉得我在这里遗漏了一些东西,我会很感激任何解释
答案 0 :(得分:0)
首先,
或者您通过引用传递或通过指针传递。我更喜欢第一个。
其次,我认为你要完成的是: 1.将plist1复制到l1,将plist2复制到l2。 2.你改变了l1和l2。 3.将l1和l2的新值复制回plist1和plist2。
我不知道你复制这些课程的原因。也许存在一些条件,当发生时,您必须撤消所有更改。所以,由于你没有直接改变plist1和plist2,你只需跳过最后的归属。
答案 1 :(得分:0)
split_list函数可能需要输入列表并将其拆分为2个列表。
Poly l1 = *plist1;
Poly l2 = *plist1;
因为plist1被复制到l1和l2,我会说这是输入列表。由于它被复制到两者,因此排序算法可能通过基于某些标准从每个列表中删除元素来工作。使用以下内容替换它时出现分段错误的原因:
Poly l1;
Poly l2;
很可能是因为Poly结构包含一个指针,该指针不指向任何内容,并在列表排序时被访问。
*plist1 = l1;
*plist2 = l2;
在函数结束时,它将两个列表的分割结果分配给plist1和plist2作为其输出形式。