我有一個類在這裏,這樣定義:幫助識別內存泄露
struct USERFPOINT
{
POINTFLOAT UserPoint;
POINTFLOAT LeftHandle;
POINTFLOAT RightHandle;
bool isBezier;
};
struct SHAPEOUTLINE {
GLuint OutlineVBO;
int OutlineSize;
int OutlineWidth;
ARGBCOLORF OutlineColor;
};
struct SHAPECONTOUR{
std::vector<USERFPOINT> UserPoints;
std::vector<std::vector<GLdouble>> DrawingPoints;
SHAPEOUTLINE Outline;
};
struct SHAPEGRADIENT{
GLuint TextureId;
bool IsParent;
bool active;
int type;
std::vector<ARGBCOLORF> colors;
};
struct SHAPEDIMENSIONS {
POINTFLOAT Dimensions;
POINTFLOAT minima;
POINTFLOAT maxima;
};
class OGLSHAPE
{
private:
int WindingRule;
GLuint TextureCoordsVBOInt;
GLuint ObjectVBOInt;
UINT ObjectVBOCount;
UINT TextureCoordsVBOCount;
SHAPEGRADIENT Gradient;
SHAPEDIMENSIONS Dimensions;
void SetCubicBezier(USERFPOINT &a,USERFPOINT &b, int ¤tcontour);
void GenerateLinePoly(const std::vector<std::vector<GLdouble> > &input, int width);
public:
std::string Name;
ARGBCOLORF MainShapeColor;
std::vector<SHAPECONTOUR> Contour;
OGLSHAPE(void);
void UpdateShape();
void SetMainColor(float r, float g, float b, float a);
void SetOutlineColor(float r, float g, float b, float a,int contour);
void SetWindingRule(int rule);
void Render();
void Init();
void DeInit();
~OGLSHAPE(void);
};
這裏是我做的一個測試。我創建了一個全球std::vector<OGLSHAPE>
測試。我創建了
OGLSHAPE t。
然後我推送了50,000份t到測試中。
我然後立即清除測試和使用的交換技巧,真正釋放它。
我注意到,所有的內存被釋放正確,因爲我期望的那樣。
然後我也做了同樣的事情,但推到牛逼測試之前,我推一推SHAPECONTOUR到牛逼測試之前(我剛剛不修改或添加任何東西到輪廓創建)。
這次清理試驗後,3個兆字節已經分配。我再次分配了兩倍,現在剩下6MB。該程序的內存使用量達到了150MB,降至12MB,但應該在8.5MB。因此,這必須被歸類爲內存泄漏,雖然我不知道如何。沒有什麼我看到可以做到的。 SHAPECONTOUR僅僅是具有向量嵌套結構的矢量結構。
爲什麼會造成泄漏,我該如何解決?
謝謝
嘗試使用valgrind或類似工具。 – 2010-07-04 04:19:27
我在您發佈的代碼中看不到一個'new',因此很難找到「泄漏」。使用valgrind,但我想你會發現它不是泄漏,操作系統沒有回收內存。 – Stephen 2010-07-04 04:23:44
使用Windows,valgrind是4 linux – jmasterx 2010-07-04 04:26:30