Проблема с перезагрузкой оператора

214
18 декабря 2017, 14:46

Пишу очередь с приоритетом. Необходимо перегрузить оператор +, но наталкиваюсь на ошибку: "Вызвано исключение: нарушение доступа для чтения. helpPtr было 0xCCCCCCCC.". Падает в функции void push(T val, size_t prt) на строке while (helpPtr && helpPtr->priority < prt) во время исполнения. Вот реализация

friend const queue operator + (const queue& q1, const queue& q2)
{
    queue newQ(q1);
    Node* helpPtr(q2.tail);
    while (helpPtr) {
        newQ.push(helpPtr->value, helpPtr->priority);
        helpPtr = helpPtr->prev;
    }
    return queue(newQ);
}

Здесь код.

Answer 1

Конструктор копирования никак не инициализирует поля head и tail нового объекта и начинает делать push, в то время как в этих полях содержится мусор. В результате все падает.

READ ALSO
Как хранить матрицу [требует правки]

Как хранить матрицу [требует правки]

Вопрос такой: как лучше произвольную(самую обычную) хранить матрицу? В виде массива указателей или цельным вектором?

228
На входе 0.16e-4 , на выходе 1.6e-05 Почему?

На входе 0.16e-4 , на выходе 1.6e-05 Почему?

// ConsoleApplication5cpp: определяет точку входа для консольного приложения

277
Как вывести double с заданным количеством символов перед запятой?

Как вывести double с заданным количеством символов перед запятой?

Мне нужно значение double перевести в строку с определенным количеством символов до и после запятойЯ использую функцию snprintf():

414