Hello, I've been working on a custom linked list for objects. The problem is I am deleting objects in the linked list, however it is having no effect on the memory usage.
I do not recieve any compiler, linker, or runtime errors. I don't recieve any errors relating to memory either.
Object class and associated functions:
Code:
class Obj
{
public:
Obj(int iII=0)
{
pcNext=NULL;
pcPrev=NULL;
iI=iII;
}
~Obj()
{
}
//All static functions relate to the list itself; they can be accessed by typing Obj::NameOfFunc
static Obj* listGetObj(int iIndex);
static int listGetIndex(Obj* pcObj);
static int listAdd(Obj* pcObj,int iWhere=-1);
static bool listRemove(int iIndex);
static void sayAll();
static Obj* pcStart;
static Obj* pcEnd;
static sui count;
void sayI()
{
cout << iI << "\n";
}
private:
Obj* pcNext;
Obj* pcPrev;
int iI;
};
sui Obj::count=0;
Obj* Obj::pcStart=NULL;
Obj* Obj::pcEnd=NULL;
Obj* Obj::listGetObj(int iIndex)
{
if(iIndex<0||iIndex>=count)
{
return NULL;
} else {
Obj* pcTarg=pcStart;
for(int i=0; i<=iIndex; i++)
{
if(i==iIndex&&pcTarg!=NULL)
return pcTarg;
else
pcTarg=pcTarg->pcNext;
}
return pcTarg;
}
}
int Obj::listGetIndex(Obj* pcObj)
{
return 0;
}
int Obj::listAdd(Obj* pcObj,int iWhere)
{
int index=iWhere;
//If -1 set place to add to end of list.
if(index<0)
index=count;
//If index is end of list
if(index>=count)
{
if(pcEnd!=NULL)
{
pcEnd->pcNext=pcObj;
pcObj->pcPrev=pcEnd;
}
pcEnd=pcObj;
}
//If index is start of list - keep in mind if list is empty the new item is both the start and end.
if(index==0) {
if(pcStart!=NULL) {
pcStart->pcPrev=pcObj;
pcObj->pcNext=pcStart;
}
pcStart=pcObj;
}
if(index!=0&&index<count)
{
Obj* pcMove=listGetObj(index);
if(pcMove!=NULL) {
pcObj->pcPrev=pcMove->pcPrev;
pcObj->pcNext=pcMove;
pcMove->pcPrev->pcNext=pcObj;
pcMove->pcPrev=pcObj;
} else {
return -1;
}
}
count++;
return index;
}
bool Obj::listRemove(int iIndex)
{
//Get Object and Check Validity
Obj* pcRemove=listGetObj(iIndex);
if(pcRemove==NULL)
return false;
//If removing the first
if(pcRemove==pcStart) {
pcStart=pcRemove->pcNext;
}
//If removing the last
if(pcRemove==pcEnd) {
pcEnd=pcRemove->pcPrev;
}
//Bridge gaps caused removed link. Set the next link's last to last and the last link's next to next.
if(pcRemove->pcNext!=NULL) {
pcRemove->pcNext->pcPrev=pcRemove->pcPrev;
}
if(pcRemove->pcPrev!=NULL) {
pcRemove->pcPrev->pcNext=pcRemove->pcNext;
}
delete pcRemove;
count--;
return true;
}
void Obj::sayAll()
{
for(Obj* pcCurrent=pcStart; pcCurrent!=NULL; pcCurrent=pcCurrent->pcNext)
{
pcCurrent->sayI();
}
}
I add objects like so:
Code:
Obj::listAdd(new Obj(1));
And remove them like so:
Code:
//0 is the index, or distance from the start of the linked list.
Obj::listRemove(0);