VC中基于对话框的程序使用astyle,运行后居然报内存泄露:
Detected memory leaks!
Dumping objects ->
{44} normal block at 0x00450030, 33 bytes long.
Data: < C > 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD
{43} normal block at 0x00450080, 40 bytes long.
Data: < |L > 14 7C 4C 10 16 00 00 00 00 00 00 00 00 00 00 00
…………………………
Object dump complete.
原因是 ASBeautifier::init() 初始化了13个指针,ASBeautifier::~ASBeautifier() 只释放了9个
原代码:
ASBeautifier::~ASBeautifier()
{
DELETE_CONTAINER( headerStack );
DELETE_CONTAINER( tempStacks );
DELETE_CONTAINER( blockParenDepthStack );
DELETE_CONTAINER( blockStatementStack );
DELETE_CONTAINER( parenStatementStack );
DELETE_CONTAINER( bracketBlockStateStack );
DELETE_CONTAINER( inStatementIndentStack );
DELETE_CONTAINER( inStatementIndentStackSizeStack );
DELETE_CONTAINER( parenIndentStack );
//DELETE_CONTAINER( sourceIterator );
}
修改后代码:
ASBeautifier::~ASBeautifier()
{
DestroyAllVector(tempStacks);
DELETE_CONTAINER( waitingBeautifierStack );
DELETE_CONTAINER( activeBeautifierStack );
DELETE_CONTAINER( waitingBeautifierStackLengthStack );
DELETE_CONTAINER( activeBeautifierStackLengthStack );
DELETE_CONTAINER( headerStack );
DELETE_CONTAINER( blockParenDepthStack );
DELETE_CONTAINER( blockStatementStack );
DELETE_CONTAINER( parenStatementStack );
DELETE_CONTAINER( bracketBlockStateStack );
DELETE_CONTAINER( inStatementIndentStack );
DELETE_CONTAINER( inStatementIndentStackSizeStack );
DELETE_CONTAINER( parenIndentStack );
}
// Added by truezq
void DestroyAllVector(vector< vector<const string*>* > *pAllVector)
{
if (pAllVector == NULL) return;
int i;
for (i = 0; i < pAllVector->size(); ++i)
{
//vector<const string*>* pVec = ;
delete (*pAllVector)[i];
}
DELETE_CONTAINER( pAllVector );
}
---------------
最后还发现报memory leaks
原因是VC自带的STL有问题,误报,使用STLPORT后没有此现象。
Detected memory leaks!
Dumping objects ->
{44} normal block at 0x00450030, 33 bytes long.
Data: < C > 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD
{43} normal block at 0x00450080, 40 bytes long.
Data: < |L > 14 7C 4C 10 16 00 00 00 00 00 00 00 00 00 00 00
…………………………
Object dump complete.
原因是 ASBeautifier::init() 初始化了13个指针,ASBeautifier::~ASBeautifier() 只释放了9个
原代码:
ASBeautifier::~ASBeautifier()
{
DELETE_CONTAINER( headerStack );
DELETE_CONTAINER( tempStacks );
DELETE_CONTAINER( blockParenDepthStack );
DELETE_CONTAINER( blockStatementStack );
DELETE_CONTAINER( parenStatementStack );
DELETE_CONTAINER( bracketBlockStateStack );
DELETE_CONTAINER( inStatementIndentStack );
DELETE_CONTAINER( inStatementIndentStackSizeStack );
DELETE_CONTAINER( parenIndentStack );
//DELETE_CONTAINER( sourceIterator );
}
修改后代码:
ASBeautifier::~ASBeautifier()
{
DestroyAllVector(tempStacks);
DELETE_CONTAINER( waitingBeautifierStack );
DELETE_CONTAINER( activeBeautifierStack );
DELETE_CONTAINER( waitingBeautifierStackLengthStack );
DELETE_CONTAINER( activeBeautifierStackLengthStack );
DELETE_CONTAINER( headerStack );
DELETE_CONTAINER( blockParenDepthStack );
DELETE_CONTAINER( blockStatementStack );
DELETE_CONTAINER( parenStatementStack );
DELETE_CONTAINER( bracketBlockStateStack );
DELETE_CONTAINER( inStatementIndentStack );
DELETE_CONTAINER( inStatementIndentStackSizeStack );
DELETE_CONTAINER( parenIndentStack );
}
// Added by truezq
void DestroyAllVector(vector< vector<const string*>* > *pAllVector)
{
if (pAllVector == NULL) return;
int i;
for (i = 0; i < pAllVector->size(); ++i)
{
//vector<const string*>* pVec = ;
delete (*pAllVector)[i];
}
DELETE_CONTAINER( pAllVector );
}
---------------
最后还发现报memory leaks
原因是VC自带的STL有问题,误报,使用STLPORT后没有此现象。