// this code contains errors // [form and print a list of integers] #include <iostream> class Node { public: // constructors / destructor Node() : next(NULL), previous(NULL) { } Node(int a) : next(NULL), previous(NULL), data(a) { } ~Node() { if (next) { delete next; } } // set/get interface void setData(int a) { data = a; } int getData(void) { return data; } void setNext(Node* theNext) { next = theNext; } Node* getNext(void) { return next; } void setPrevious(Node* thePrevious) { previous = thePrevious; } Node* getPrevious(void) { return previous; } // list capabilities // return true if node is the first of the list, false otherwise bool isFirst(void) { return !previous; } // return true if node is the last of the list, false otherwise bool isLast(void) { return !next; } // return the size of the sublist starting from this node int size(void) { Node* t = this; int ret = 1; while(!t->isLast()) { t = next; ret++; } return ret; } // append a new given node at the end of the list void append(Node* theNext) { Node* t = this; while(!t->isLast()) { t = next; } t->setNext(theNext); theNext->setPrevious(t); } // create a new node with value 'a' and append it at the end of the list void appendNew(int a) { Node* t = this; while(!t->isLast()) { t = next; } Node* theNewNode = new Node(a); t->setNext(theNewNode); theNewNode->setPrevious(t); } // remove this node from the list void erase(void) { previous->setNext(next); next->setPrevious(previous); } // replace this node with a given node void replaceWith(Node* replacement) { previous->setNext(replacement); next->setPrevious(replacement); } // find first node with a specified value in sublist starting from this node // return NULL if not found Node* find(int needle) { if (data == needle) { return this; } Node* t = this; while(!t->isLast()) { t = next; if (t->getData() == needle) { return t; } } return NULL; } // print the data in the sublist starting from this node void print(void) { Node* t = this; while(!t->isLast()) { std::cout << t.getData() << ", "; t = next; } std::cout << t->getData() << std::endl; } protected: // pointer to next node in list Node* next; // pointer to previous node in list Node* previous; private: // the integer data stored in the node int data; }; int main(int argc, char** argv) { using namespace std; int c = 1; // create a new list Node start(c); // add 10 nodes to the list while(c < 10) { c++; start.appendNew(c); } // print the list start.print(); // find the node with value 5 Node* t = start.find(5); // erase this node t->erase(); // print the list again start.print(); return 0; }The code contains:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 1, 2, 3, 4, 6, 7, 8, 9, 10Now use the valgrind memory debugger to check for memory leaks. Run the command
and using its output find and fix the error.![]()