?????????????????????У????й??????????????????????????ī???????????????????Σ?????????????????棬????й??????????????????й???????????????????棬??????????ò????????????????????????Ч???????????????棬???????????????????飬???г????????????

?????????????й??????????

void process(int size) 

    char* pData = (char*)malloc(size); 
 
    /* other code  */ 
     
    return; /* forget to free pData */ 
}
 
??????????????????????process?????????У????ζ?????????????????????????????????????н??????????????????δ??????????????????????????????????????????????????????????????????100??????????????????????????????????????????????????????±?????????????????????????е???????????????????????????????????????????????????????????????????ò?????????????????????????????????????????????????????????????????????????

???????й???Σ???????????????????????й????????????????????????????????????bug???????????????飬???????bug???????????????????????顣?????????б?????????д????????????????й????????????????λ?????檔???????????????????????????

???????????????????й??????????????????????棺

??????1????????????????????????????????????????????

??????2????????????????

?????????1??????????????????????????y????????????????????棺

????a?????y????????

typedef struct _MEMORY_NODE 

    char functionName[64]; 
    int line; 
    void* pAddress; 
    struct _MEMORY_NODE* next; 
 
}MEMORY_NODE;
 ???????? functionName????????????line????????? pAddress???????????? next?????????????

????b???????????亯??

???????????malloc???к?????????????????????

????#define malloc(param)  MemoryMalloc(__FUNCTION__?? __LINE__?? param)

???????????????д????????

void* MemoryMalloc(const char* name?? int line?? int size) 

    void* pData = (void*)malloc(size); 
    MEMORY_NODE* pMemNode = NULL; 
    if(NULL == pData) return NULL; 
    memset((char*)pData?? 0?? size); 
 
    pMemNode = (MEMORY_NODE*)malloc(sizeof(MEMORY_NODE)); 
    if(NULL == pMemNode){ 
        free(pData); 
        return NULL; 
    } 
    memset((char*)pMemNode?? 0?? sizeof(MEMORY_NODE)); 
    memmove(pMemNode->functionName?? name?? strlen(name)); 
    pMemNode->line = line; 
    pMemNode->pAddress = pData; 
    pMemNode->next = NULL; 
    add_memory_node(pMemNode); 
 
    return pData; 
}
 ???????????????л??漰??????????????????????????????????

static MEMORY_NODE* gMemNode = NULL;  
  
void add_memory_node(MEMORY_NODE* pMemNode)  
{  
    MEMORY_NODE* pNode = gMemNode;  
    if(NULL == pMemNode) return;  
    if(NULL == gMemNode){  
        gMemNode = pMemNode;  
        return;  
    }  
  
    while(NULL != pNode->next){  
        pNode = pNode->next;  
    }  
    pNode->next = pMemNode;  
    return;  
}
 
????????gMemNode?????????????????????????????malloc?????????????м?????????????У??????????????malloc??????????????????????????????????????????????й????λ?????????????

?????????????????????????????????????????ɡ?

????a?????????????????????????????????????????????????????д??????????????????????????????У?????????????????????????????????????????assert(gMemNode == NULL)???????????????

????b?????????????????????Щ????????????????????????????????????free???????棬free???free??????棬?????????????????????????е????

???????????free??????????????????????????

????#define free(param)      MemoryFree(param)

?????????????????????????

????view plaincopy to clipboardprint?

void MemoryFree(void* pAddress)  
{  
    if(NULL == pAddress) return;  
    delete_memory_node(pAddress);  
    free(pAddress);  
}
 ???????????????????????????????????

void delete_memory_node(void* pAddress)  
{  
    MEMORY_NODE* pHead = gMemNode;  
    MEMORY_NODE* pMemNode = gMemNode;  
    while(NULL != pMemNode){  
        if(pAddress == pMemNode->pAddress)  
            break;  
        pMemNode = pMemNode->next;  
    }  
    if(NULL == pMemNode) {  
        assert(1 == 0);  
        return;  
    }  
  
    while(pMemNode != pHead->next){  
        pHead = pHead->next;  
    }  
  
    if(pMemNode == gMemNode){  
        gMemNode = gMemNode->next;  
    }else{  
        pHead->next = pMemNode->next;  
    }  
    free(pMemNode);  
    return;  
}
 ?????????????С?δ????????????????д????????????????????????к?????ж?????????????????ж???????????????????????????????????????????????????????????????????????????????????????

??????1????п?????????????????????????????????????????????????????????е??????ε?????????????????????ж????

??????2???????н????????????????п???????????Σ????????????????????????????????????