⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmem_list.cpp

📁 跨平台C++基础库
💻 CPP
字号:

#ifdef M_MEM_TEST

#include "mmem_list.h"

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

MemTrace::MemTrace()
{
    m_listHead.m_pBlock =   NULL;
    m_listHead.m_nSize  =   0;
    //strcpy( m_listHead.m_szFileName, *, * );
    m_listHead.m_nLine  =   0;

    m_listHead.pNext    =   NULL;
}

MemTrace::~MemTrace()
{
    this->displayMemLeaked();

    if ( this->m_listHead.pNext != NULL ) //list is not empty
    {
        MemTraceNode*   pNode   =   this->m_listHead.pNext;
        while ( pNode != NULL )
        {
            this->m_listHead.pNext  =   pNode->pNext;
            //release leaked memory
            ::free( pNode->m_pBlock );
            //release node
            ::free( pNode );

            pNode   =   this->m_listHead.pNext;
        }
    }
}

void MemTrace::insert( MemTraceNode* pNode )
{
    if ( pNode != NULL )
    {
        //find last node
        MemTraceNode*   pTailNode   =   &(this->m_listHead);
        while( pTailNode->pNext != NULL )
        {
            pTailNode   =   pTailNode->pNext;
        }
        pTailNode->pNext =   pNode;

        pNode->pNext    =   NULL;
    }
}

void MemTrace::erase( void* pBlock )
{
    if ( pBlock != NULL )
    {
        //find the block node
        MemTraceNode*   pPrevNode   =   &(this->m_listHead);   
        MemTraceNode*   pNode       =   pPrevNode->pNext;
        while ( pNode != NULL )
        {
            if ( pNode->m_pBlock == pBlock )
            {
                break;
            }

            pPrevNode   =   pNode;
            pNode       =   pPrevNode->pNext;
        }

        //if block node is found
        if (  pNode != NULL )
        {
            pPrevNode->pNext    =   pNode->pNext;

            //release leaked memory
            //::free( pNode->m_pBlock );
            //release node
            ::free( pNode );
        }
    }
}

void MemTrace::displayMemLeaked()
{
    MemTraceNode*   pNode   =   this->m_listHead.pNext;

    printf( "\n\nMemory Block leaked ...\n" );
    while ( pNode != NULL )
    {
        printf( "    %s(%d) : normal block at 0x%x, %d bytes long.\n",
            pNode->m_szFileName,
            pNode->m_nLine,
            pNode->m_pBlock,
            pNode->m_nSize
            );

        pNode   =   pNode->pNext;
    }
    printf( "\n" );
}

#endif //end M_MEM_TEST

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -