Деструктор отсортированного связанного списка c ++ - PullRequest
0 голосов
/ 06 ноября 2018

В настоящее время я работаю над программой, которая добавляет заголовки фильмов в отсортированный связанный список, и я продолжаю работать с «Ошибка сегментации: 11», и я понятия не имею, откуда она берется. вот мой файл спецификации и код клиента.

#include <string>
#include <iostream>
#include "Movies.h"
using namespace std;
struct NodeList {
    string movieName; //data
    NodeList* next; //points to next item
};

Movies::Movies()
{
    headOfList = NULL;
    length = 0;
    currentPos = NULL;
}
void Movies::insertMovie(string movieName)
{
    NodeList* tempPtr = new NodeList;
    tempPtr->movieName = movieName;
    if(headOfList == NULL)
    {
        headOfList = tempPtr;
    }
    else {
        currentPos = headOfList;
        NodeList* trail = NULL;
    while(currentPos != NULL)
    {
        if(currentPos->movieName >= tempPtr->movieName)
        {
            break;
        }
        else
        {
            trail = currentPos;
            currentPos = currentPos->next;
        }
        if(currentPos == headOfList) {
            tempPtr->next = headOfList;
            headOfList = tempPtr;
        }
        else {
            tempPtr->next = currentPos; 
            trail->next = tempPtr;
        }
       }
      }
       length++;
    }

Movies::~Movies()
{
    NodeList* temp;
    while(headOfList != NULL)
    {
        temp = headOfList;
        headOfList = headOfList->next;
        delete currentPos;
    }
}

и вот мой клиент

#include <iostream>
#include <string>
#include "Movies.h"
using namespace std;
int main()
{
    Movies myMovieList;

    myMovieList.insertMovie("Harry Potter");
    myMovieList.printList();
    return 0;
}

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

1 Ответ

0 голосов
/ 06 ноября 2018

Не хватает репутации, чтобы комментировать, поэтому новое сообщение.

  1. Вы не предоставили определение функции printList (), а также содержимое файла Movies.h, который также может иметь проблемы.
  2. В деструкторе Movies вы используете «temp» для хранения текущей головы, которую нужно удалить, вместо этого вы удаляете currentPos.
  3. В функции insertMovie, если "currentPos-> movieName> = tempPtr-> movieName" имеет значение true, вы прерываете цикл while, не вставляя его в список, но увеличивая длину каждый раз.

Надеюсь, это поможет.

...