Main.cpp
#include<iostream>
#include "Queue.h"
using namespace std;
char* PotionTypeString(PotionType type)
{
char* s = "UNKNOWN";
switch (type) {
case SPEED:
s = "Speed";
break;
case STRENGTH:
s = "Strength";
break;
case HEALTH:
s = "Health";
break;
case WISDOM:
s = "Wisdom";
break;
}
return(s);
}
int main()
{
Queue q;
q.enqueue(WISDOM);
q.dequeue();
#ifdef _WIN32
if (_CrtDumpMemoryLeaks()) {
cout << "Memory leaks!" << endl;
} else {
cout << "No leaks" << endl;
}
#endif
return 0;
}
Queue.cpp
#include "Queue.h"
#include <string.h>
#include <iostream>
using namespace std;
Queue::Queue() {
front = NULL;
rear = NULL;
size = 0;
}
Queue::~Queue() {
Node* cur = front;
while (cur != NULL) {
Node* temp = cur->next;
delete cur;
cur = temp;
}
}
void Queue::enqueue(PotionType type) {
Node* node = new Node();
node->type = type;
if (front == NULL) {
front = node;
}
else {
rear->next = node;
}
rear = node;
size = size + 1;
}
PotionType Queue::dequeue() {
PotionType toRet;
if (front != NULL) {
Node* node = new Node();
node = front;
front = front->next;
toRet = node->type;
delete(node);
size = size - 1;
}
return toRet;
}
void Queue::print() {
if (front == NULL) {
cout << "Empty list" << endl;
}
else {
Node * toPrint = new Node();
toPrint = front;
while (toPrint != NULL) {
cout << PotionTypeString(toPrint->type) << endl;
toPrint = toPrint->next;
}
}
}
In the main function I just instantiate an empty Queue, add a single item, then de-queue a single item, and I am getting memory leaks, I feel it has something to do with my dequeue method, or my destructor...
Though, I am kind of new to C++, so I am not entirely sure.
Anyone willing to help me out here?
Edit:
I put in the changes suggested by user4581301, and it fixed my memory leak issue when simply going
Queue q;
q.enqueue(WISDOM);
q.dequeue();
However, if I remove the q.dequeue() and leave it up to the destructor then, I receive a memory leak.