我目前正在用C++編寫容器,但遇到內存泄漏問題。 出於測試目的,我創建了2個版本的主:創建並在一個循環中刪除列表對象(一切OK這裏) 第一個在第一循環 第二個創建對象並刪除它們都在第二個(兩個循環結束後它仍然是程序使用的很多內存)。容器內存泄漏C++
OS:Windows 7的; IDE:CodeBlock 12.11; 編譯器:GNU GCC
代碼 (放置在一個代碼塊,對不起,如果還不清楚的人,只想把這篇文章越短越好)
main.cpp中:
#include <iostream>
using namespace std;
#include "planetarySystemContainer.hpp"
int main()
{
PlanetarySystemContainer * container;
container=new PlanetarySystemContainer();
PlanetarySystem *planet;
int i;
cin>>i;
i=0;
for(int i=0; i<10000000; i++)
{
planet=new PlanetarySystem();
planet->name("blabgs4tegser4labnab");
container->AddAtBegining(planet);
}
for(int i=0; i<10000000; i++)
{
container->DeleteFromBegining();
}
cin>>i;
return 0;
}
planetarySystemContainer.hpp:
class PlanetarySystemContainer
{
private:
PlanetarySystem *First;
PlanetarySystem *Last;
int PlanetarySystemQuantity;
public:
PlanetarySystemContainer();
void AddAtBegining(PlanetarySystem *a);
void DeleteFromBegining();
};
planetarySystemContainer.cpp
#include"planetarySystemContainer.hpp"
PlanetarySystemContainer::PlanetarySystemContainer()
:First(NULL)
,Last(NULL)
,PlanetarySystemQuantity(0)
{
}
void PlanetarySystemContainer::AddAtBegining(PlanetarySystem *a)
{
a->SetPrevious(NULL);
a->SetNext(First);
First=a;
if(a->GetNext()==NULL)
Last=a;
PlanetarySystemQuantity++;
}
void PlanetarySystemContainer::DeleteFromBegining()
{
if(First!=NULL)
{
if(First->GetNext()!=NULL)
{
PlanetarySystem* x=First;
First=First->GetNext();
First->SetPrevious(NULL);
delete x;
}
else
{
PlanetarySystem* x=First;
First=NULL;
Last=NULL;
delete x;
}
PlanetarySystemQuantity--;
}
}
planetarySystem.hpp:
#include <iostream>
class PlanetarySystem
{
private:
PlanetarySystem* Next;
PlanetarySystem* Previous;
unsigned int PlanetQuantity; //ilosc obiektow w ukladzie (planet+stacji+asteroid)
public:
PlanetarySystem();
string name;
PlanetarySystem *GetNext();
PlanetarySystem *GetPrevious();
void SetNext(PlanetarySystem *ps);
void SetPrevious(PlanetarySystem *ps);
int GetPlanetQuantity();
};
planetarySystem.cpp:
#include "planetarySystem.hpp"
PlanetarySystem::PlanetarySystem()
:Next(NULL)
,Previous(NULL)
,PlanetQuantity(0)
{
}
PlanetarySystem *PlanetarySystem::GetNext()
{
return Next;
}
PlanetarySystem *PlanetarySystem::GetPrevious()
{
return Previous;
}
void PlanetarySystem::SetNext(PlanetarySystem *ps)
{
Next=ps;
}
void PlanetarySystem::SetPrevious(PlanetarySystem *ps)
{
Previous=ps;
}
int PlanetarySystem::GetPlanetQuantity()
{
return PlanetQuantity;
};
「...它仍然有很多內存使用的程序」根據什麼?非程序員工具(如任務管理器)即使釋放後仍顯示大量正在使用的內存,這是很正常的。 –
不幸的是它是任務管理器。 不應該那麼它發生同樣的漏檢false main.cpp與一個循環? 是我的空DeleteFromBegining();功能好嗎? 我會用盡可能快的速度測試使用免費內存泄漏檢測程序的程序,我將能夠學習它。 – Albert
難道你不能使用其中一個標準容器並將'PlanetarySystem'存儲在該容器中的'std :: unique_ptr <>'內嗎?爲什麼重新發明輪子? – Void