分段错误:11尝试按优势和平均值排序链表时

时间:2014-01-28 22:25:44

标签: c++ linked-list segmentation-fault nodes chain

我正在尝试完成我的数据结构课程的作业,但我在其中一个函数中不断出现段错误。

我有这个功能正在创建两个新链,一个用于偶数,另一个用于赔率,在原始列表中递增,并根据元素是偶数还是奇数来填充新链。

我坚持的是将奇数链中的最后一个节点链接到偶数链的开头,因为链需要在函数末尾链接在一起。

void chain :: oddAndEvenOrdering()
{
//This function reorders the list 
//such a way that all odd numbers precede all even numbers. 
//Note that for two odd (even) 
//numbers i and j, the ordering between 
//i and j should be intact after reordering.
// Create empty chain to store odds
chain *oddChain = new chain(100);
chainNode *oddNode = oddChain->firstNode;
// Create empty chain to store evens
chain *evenChain = new chain(100);

int countOdd = 0;
int countEven = 0;
for (int i = 0; i < listSize-1; i++)
{
    if (*this->get(i) % 2 == 0)
    {
        evenChain->insert(countEven, *this->get(i));
        countEven++;
    } else {
        oddChain->insert(countOdd, *this->get(i));
        oddNode = oddNode->next;
        countOdd++;
    }

}
chainNode *evenNode = evenChain->firstNode; 
oddNode->next = evenNode;

delete this;
this->firstNode = oddChain->firstNode;

}

2 个答案:

答案 0 :(得分:2)

这肯定会产生错误:

delete this;
this->firstNode = oddChain->firstNode;

删除this,然后尝试访问其成员。

答案 1 :(得分:1)

你的记忆问题已在Anton的答案中得到解决,但如果你以与标准库一致的方式实现容器,你可以完全避免它。例如:

std::vector<int> vec { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
std::partition(vec.begin(), vec.end(), [](int i)
{
    return i % 2;
});

这将把所有的赔率都放在向量的开头和最后的所有平均值上。