пользовательские переменные в куче уничтожаются в цикле while

0

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

 Book* temp;  
    temp = bookSetUp(); 

это относится к другой cpp, называемой функциями, которая устанавливает такие объекты:
functions.cpp

      Book* bookSetUp()  
        {  
    //The items that populate the list  
    Book* a= new Book("A Tale of Two Cities", "Charles Dickens", "1", true);  
    Book* b= new Book("Lord of the rings", "J.R.R Tolkein", "2", true);  
    Book* c= new Book("Le Petit Prince", "Antoine de Saint-Exupéry", "3", true);  
    Book* d= new Book("And Then There Were None", "Agatha Christie", "4", true);  
    Book* e= new Book("Dream of the Red Chamber","Cao Xueqin","5", true);  
    Book* f= new Book("The Hobbit","J.R.R Tolkein","6", true);  
    //sets up the pointers between books  
    a->setPrev(NULL);  
    a->setNext(b);  
    b->setPrev(a);  
    b->setNext(c);  
    c->setPrev(b);  
    c->setNext(d);  
    d->setPrev(c);  
    d->setNext(e);  
    e->setPrev(d);  
    e->setNext(f);  
    f->setPrev(e);  
    f->setNext(NULL);  
    //sets up a temp pointer to a  
    Book* temp = a;  
    //returns the temp pointer to a  
    return temp;  
}

это работает отлично, но позже, когда я снова добавляю в список, используя:
main.cpp

else if(checkRegUser(username, password, regUserList) == true)
    {
        int choice = 99;
        cout << "Welcome Registered user: "<< username << endl;
        while(choice != 0)
        {
            //this is so the print will start everytime as if you run it once print will be at NULL thereafter
            Book* print = temp;
            choice = options();
            if(choice == 1)
            {
                while(print!=NULL)
                {
                        cout<<"Name: "<<print->getName()<<endl<<"Author: "<<print->getAuthor()<<endl<<"ISBN: "<<print->getISBN()<<endl<<"Availability: "<<print->getAvail()<<endl;
                        cout<<endl;
                        print = print->getNext();
                }
                print = temp;
            }
            if(choice == 2)
            {
                search(temp);
            }
            if(choice == 3)
            {
                takeOut(temp);
            }
            if(choice == 4)
            {
                returnBack(temp);
            }
            if(choice == 5)
            {
                append(temp);
            }
            if(choice == 6)
            {
                cout<<"Sorry you have the privilege needed to use this function."<<endl;
            }
            if(choice == 7)
            {
                choice = 0;
            }
        }
    }

Мои пользовательские переменные будут уничтожены. Я отлаживался, и они просто исчезли, я не уверен, почему!
В любом случае, это необходимо для моей функции add(), потому что я чувствую, что мне может быть что-то маленькое или просто совершить катастрофическую ошибку. Моя функция добавления находится в функции functions.cpp, и я знаю, что все ссылки работают, поскольку у меня есть все остальное, кроме этого
functions.cpp

Book* append(Book* tempParam)  
{  
   string title;  
   string author;  
   string isbn;  
   bool avail;  
   cout<<"What is the book called?"<<endl;  
   cin.clear();  
   cin.ignore();  
   getline(cin, title);     
   cout<<"Who is the author?"<<endl;  
   cin.clear();  
   cin.ignore();  
   getline(cin, author);  
   cout<<"What is the ISBN to be?"<<endl;  
   cin>>isbn;  
   Book* temp = new Book(title, author, isbn, true);
   Book* list = tempParam;int count;  
   while(list!=NULL)  
   {  
      if(list->getNext()==NULL&&list->getName()!=title)  
      {
         list->setNext(temp);  
         temp->setNext(NULL);  
         temp->setPrev(list);  
         cout<<"Your book has been added"<<endl;  
         cout<<temp->getName()<<temp->getAuthor()<<endl;  
      }  
      list = list->getNext();  
   }  
   tempParam = list;  
   return tempParam;  
}

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

  • 0
    Это add или append ? Не могли бы вы подготовить минимальный полный пример ?
  • 0
    Я думаю, что нам нужно больше основного.
Показать ещё 5 комментариев
Теги:
function
linked-list
heap-memory

1 ответ

1
Лучший ответ

* Я думаю, что ошибка найдена в этом разделе кода:

 list->setNext(temp);  

Вы "теряете" книги, потому что не сохранили их, прежде чем изменять list-> далее. *

Ответ неверен, потому что условный оператор гарантирует, что он является последним элементом списка. Сожалею!

  • 0
    Я тоже так думал, но когда я отлаживаюсь и возвращаюсь к основному списку, он все еще жив, пока он не "завершит" цикл, и в этот момент список уничтожается @AFM
  • 0
    @ Dennington-bear - Значит, список все еще содержит всю книгу, когда она выходит из функции добавления?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню