Где происходит утечка памяти в моем методе InsertLater() для класса LinkedList?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Где происходит утечка памяти в моем методе InsertLater() для класса LinkedList?

Сообщение Anonymous »

Я в основном выполнил лабораторное задание по вводному курсу C++ с программой, которая полностью функциональна для достижения желаемого результата, используя класс связанного списка, который я создал на основе инструкций задания. Однако, используя Valgrind, я обнаружил две утечки памяти, которые происходят в ходе моей программы, и обе, по-видимому, происходят в одной и той же части моего кода — методе InsertLast() моего класса LinkedList. Изображение отчета Valgrind
Мне трудно найти источник утечек памяти в этом методе, несмотря на то, что я знаю, что он должен находиться в этом разделе кода. Код следующий:

Код: Выделить всё

bool LinkedList::InsertLast(int v) {
Node* newNode = new Node;
if (newNode == NULL) {
return false;
}
newNode->next = NULL;
newNode->value = v;
if (size == 0) {
first = newNode;
}
if (size != 0) {
last->next = newNode;
}
last = newNode;
size++;
return true;
}
Каждый узел содержит переменную значения и указатель следующего для поиска следующего узла в связанном списке. Сам связанный список хранит указатели на первый и последний содержащиеся в нем узлы, а также целочисленную переменную для отслеживания размера списка. Эта функция предназначена для создания нового узла в конце списка, подключения его к списку путем указания на него следующего указателя текущего последнего узла, а затем обновления последнего указателя связанного списка, чтобы он также указывал на новый узел.
Я искал причину, по которой различные переназначения указателей могут привести к тому, что один узел становится недоступным, но пока не могу понять этого. Если у меня есть список [w, x, y] и я использую InsertLast(z), то, если только InsertLast() не вызовет изменение x->next, я не понимаю, как y станет недоступным (вы можете просто перебирать список пока вы не дошли до него). А поскольку метод присваивает y->next и Last новому узлу, очевидно, что z будет доступен. Но если это два узла, на которые влияет InsertLast(), то я знаю, что один из них каким-то образом страдает от утечки памяти. Должно быть, я что-то упускаю, поэтому надеялся, что интернет-сообщество поможет мне понять, что это такое.

Подробнее здесь: https://stackoverflow.com/questions/783 ... nkedlist-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»