Problem with Linked List
I made a linked list that can add an item, go to the first item, and
get the current, next, and previous item in the list. When I compile
it, there are no errors, but it overloads. Here is the code:
//fnamelink.h------------------------------------------------------
class flink
{
public:
char data[_MAX_DIR+1];
flink* previous;
flink* next;
flink()
{
previous = NULL;
next = NULL;
}
};
class fnamelink
{
private:
flink* first;
public:
fnamelink()
{ first = NULL; }
void addItem(char* foldername);
char* getCurrent();
char* getPrevious();
char* getNext();
char* getFirst();
void deleteLink();
~fnamelink()
{
getFirst();
deleteLink();
}
};
//
fnamelink.cpp-------------------------------------------------------------------------------------------------
#include <string.h>
#include <malloc.h>
#include "StdAfx.h" //<--Includes #include "fnamelink.h"
void fnamelink::addItem(char* foldername)
{
flink* newlink = new flink;
memset(newlink->data, NULL, sizeof(newlink->data));
strcpy(newlink->data, foldername);
newlink->previous = first;
if(first)
first->next = newlink;
first = newlink;
}
char* fnamelink::getCurrent()
{
flink* current = first;
if(current != NULL)
return current->data;
else
return NULL;
}
char* fnamelink::getPrevious()
{
flink* current = first;
current = current->previous;
if(current->previous == NULL)
{
first = current;
return NULL;
}
if(current->previous != NULL)
return current->data;
else
return NULL;
}
char* fnamelink::getNext()
{
flink* current = first;
if((current = current->next) == NULL)
{
return NULL;
}
if(current != NULL)
return current->data;
else
return NULL;
}
char* fnamelink::getFirst()
{
flink* current = first;
if(current)
{
=> while(current->previous != NULL)
{
current = current->previous;
}
}
first = current;
if(first)
return first->data;
else
return NULL;
}
void fnamelink::deleteLink()
{
int numToDel = 0;
flink* current = first;
if(current->next)
{
while(current->next != NULL)
{
current = current->next;
first = current;
numToDel++;
}
while((numToDel) >= 0)
{
numToDel--;
first = first->previous;
free(current);
current = first;
}
free(current);
}
else
{
first = first->previous;
free(current);
}
}
The '=>' I placed in the code was the exception the debugger pointed
out, but I can't seem to find a problem with it. Any help would be
greatly appreciated.