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.