Memory leak in C++ program.
- by lampshade
What I have is a very crude linked list..THe problem for me is that I am getting a memory leak in the constructor or main. I think it is the constructor. I have not yet deleted the eventName varaible that I have allocated memory for.
Could someone help please? :/ (This is not a homework question)
class Event
{
private:
char * eventName
;
string userEvent;
struct node
{
node();
node * nextByName;
const char * eventName;
};
node * headByName;
public:
Event(const char * eventName, const Date &myDate);
Event();
virtual ~Event();
void insert(const char * eventName, const Date &myDate, const Time &myTime);
void setEvent();
const char * const getEvent() const { return userEvent.c_str(); };
void displayByName(ostream& out) const;
};
Event::Event(const char * eventName, const Date &myDate) : eventName(new char[strlen(eventName)+1]),
headByName(NULL),
userEvent("")
{
if (eventName)
{
size_t length = strlen(eventName) +1;
strcpy_s(this->eventName, length, eventName);
}
else eventName = NULL;
}
Event::Event() : eventName(NULL), userEvent(NULL), headByName(NULL)
{
}
Event::~Event()
{
node * temp_node = NULL;
node * current_node = headByName;
while ( current_node )
{
temp_node = current_node->nextByName;
delete current_node;
current_node = temp_node;
}
}
void Event::insert(const char * eventName, const Date &myDate, const Time &myTime)
// when we insert we dont care about the time, just the name and the date
{
node * current_node = new node();
if ( headByName == NULL )
{
headByName = current_node;
headByName->eventName = eventName;
}
else
{
node * search_node = headByName;
node * prev_node = NULL;
while ( search_node != NULL )
{
prev_node = search_node;
search_node = search_node->nextByName;
}
if ( NULL == prev_node )
{
headByName = current_node;
}
else
{
prev_node->nextByName = current_node;
}
current_node->nextByName = search_node;
current_node->eventName = eventName ;
}
}
void Event::displayByName(ostream& out) const
{
cout << "Scheduled Events are: " << endl << endl;
node * current_node = headByName;
while ( current_node )
{
(char*)eventName = (char*)current_node->eventName;
out << eventName << endl;
current_node = current_node->nextByName;
}
}
Event::node::node() : nextByName(NULL), eventName(NULL)
{
}
void Event::setEvent()
{
cout << "\n\nEnter a new event! ";
cin.getline((char*)userEvent.c_str(), 256);
size_t length = strlen(userEvent.c_str()) +1;
strcpy_s((char*)this->userEvent.c_str(), length, userEvent.c_str());
}
/*********************************************************************************
**********************************************************************************/
int main()
{
Date * dPtr = new Date("March", 21, 2010); // instaintiate our Date class object by allocating default date paramateres.
Event * ePtr = new Event("First Day of Spring", *dPtr);
Time * tPtr = new Time(10,12,"PM");
cout << "default Time is: " << tPtr << endl;
cout << "default Date is: " << dPtr << endl;
ePtr->insert("First Day of Spring",*dPtr, *tPtr);
ePtr->insert("Valentines Day", Date("February",14,2010), *tPtr);
ePtr->insert("New Years Day", Date("Janurary",1,2011), *tPtr);
ePtr->insert("St. Patricks Day", Date("March",17,2010), *tPtr);
ePtr->displayByName(cout);
ePtr->setEvent();
const char * const theEvent = ePtr->getEvent();
dPtr->setDate();
ePtr->insert(theEvent, *dPtr, *tPtr);
tPtr->setTime();
cout << "Your event: " << theEvent << " is scheduled for: " << endl
<< dPtr << "at" << tPtr;
ePtr->displayByName(cout);
delete tPtr;
delete dPtr;
delete ePtr;
cin.ignore();
return 0;
}