???????????й?
???????????? ???????[ 2011/12/21 11:28:46 ] ????????
?????????????????????У????й??????????????????????????ī???????????????????Σ?????????????????棬????й??????????????????й???????????????????棬??????????ò????????????????????????Ч???????????????棬???????????????????飬???г????????????
?????????????й??????????
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???????н????????????????п???????????Σ????????????????????????????????????
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11