Ошибка сегментации: 11 при попытке отсортировать связанный список по коэффициентам и четностям

Я пытаюсь выполнить задание по курсу «Структуры данных», но в одной из моих функций по-прежнему возникает ошибка.

Я выполняю эту функцию, создавая две новые цепочки, одну для четных чисел и другую для шансов, увеличивая исходный список и заполняя новые цепочки, основываясь на том, является ли элемент четным или нечетным.

Я застрял в том, чтобы последний узел из нечетной цепочки связывался с началом четной цепочки, потому что цепочки должны быть связаны друг с другом в конце функции.

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;

}

0

Решение

Это наверняка приведет к ошибке:

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

Вы удаляете this а затем попытаться получить доступ к своим членам.

2

Другие решения

Ваша проблема с памятью уже была рассмотрена в ответе Антона, но вы могли бы полностью ее избежать, если бы вы реализовали свой контейнер таким образом, который совместим со стандартной библиотекой. Например:

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;
});

Это поместит все шансы в начале вектора и все четности в конце.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector