Read Access Violation (this->headPtr was 0xCDCDCDCD)
<p>Remove (T &item) is supposed to remove the headPtr and store that "item value" in "item" and return true, otherwise return false if no elements are in the queue. I get a "read access violation error" in this function. Here is the class and function definitions:</p><pre><br /><code>class SharedQueue {<br />public:<br /> SharedQueue();<br /> ~SharedQueue();<br /><br /> //Return true if the queue is empty<br /> bool IsEmpty() const;<br /><br /> //Enqueue the next item at the tail of the queue.<br /> void Add(T value);<br /><br /> //Dequeue the next queue element and store it in "item" variable. The function returns false if the queue is empty and no item can be retrieved.<br /> bool Remove(T &item);<br /> void Print();<br />private:<br /> struct QueueItem {<br /> T item;<br /> QueueItem *next;<br /> };<br /> //Fill in the The private data members.<br /> QueueItem *headPtr;<br /> QueueItem *tailPtr;<br />};<br /><br />template <typename T> SharedQueue<T>::SharedQueue() {<br /> headPtr = NULL;<br /> tailPtr = NULL;<br />}<br /><br />template <typename T>SharedQueue<T>::~SharedQueue() {<br /> QueueItem *temp;<br /> while (headPtr != NULL) {<br /> temp = headPtr;<br /> headPtr = headPtr->next;<br /> delete temp;<br /> }<br />}<br /><br />template <typename T> bool SharedQueue<T>::IsEmpty() const {<br /> if (headPtr == NULL && tailPtr == NULL) {<br /> return true;<br /> }<br /> return false;<br />}<br /><br />template <typename T> void SharedQueue<T>::Add(T aValue) {<br /> if (headPtr == NULL) {<br /> QueueItem *newItem = new QueueItem;<br /> newItem->item = aValue;<br /> tailPtr = headPtr = newItem;<br /> }<br /> else {<br /> QueueItem *newItem = new QueueItem;<br /> newItem->item = aValue;<br /> tailPtr->next = newItem;<br /> tailPtr = tailPtr->next;<br /> }<br />}<br /><br />template <typename T> bool SharedQueue<T>::Remove(T &item) {<br /> if (headPtr == NULL) {<br /> return false;<br /> }<br /> else {<br /> QueueItem temp = *headPtr;<br /> item = headPtr->item;<br /> delete headPtr;<br /> headPtr = temp.next;<br /> return true;<br /> }<br />}<br /><br />template <typename T> void SharedQueue<T>::Print() {<br /> QueueItem *temp = headPtr;<br /> while (temp != NULL) {<br /> std::cout << temp->item << "\n";<br /> temp = temp->next;<br /> }<br />}<br /></code><br /></pre><br /><h2>Click here view more answers <a href="http://ift.tt/1OrGH8j">http://ift.tt/1OrGH8j</a></h2>
Nhận xét
Đăng nhận xét