?????????????????У?????n?????????????????λ??????ch??pBuff???????????????????chλ??????????pBuff??????malloc??????????????λ??????

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

???????????????????????????????????????????????????????????????????????????????????????????????????????У????????????????????????????????????Ρ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Ч????????????????????????

??????????????????????????malloc?????????????????????????????????????????????????????????????????free????

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


//??????????????
typedef struct _CListen_ListenAcceptTask_Param_
{
    Linux_Win_SOCKET m_nSocket;
    //????????… …
}SCListenAcceptTaskParam;
//?????д???????y??????????????????磬?????malloc??????
const ULONG SCListenAcceptTaskParamSize = sizeof(SCListenAcceptTaskParam);
//??????????????????????????????????????????????????????????????
bool CListen::ListenTaskCallback(void* pCallParam??int& nStatus)
{
    //????????????… …
    //???s??accept????socket??????????????????
    //???????????????????????????
    SCListenAcceptTaskParam* pParam = (SCListenAcceptTaskParam*) malloc(SCListenAcceptTaskParamSize);
    //???????????
    pParam->m_nSocket = s;
    //????????????pParam????????… …
    //????????????… …
}
//??????????????????????accept????socket
bool CListen::ListenAcceptTask(void* pCallParam??int& nStatus)
{
    //????仰??????????????????????紫??????????
    SCListenAcceptTaskParam* pParam= (SCListenAcceptTaskParam*)pCallParam;
    //????????????… …
    //??????????????????????????????й?
    close(pParam->m_nSocket); //???socket
    free(pCallParam); // free????????????
    //… …

}
 


??????????bug

???????????????????????′?????bug?????????????????????????????????????????????????????

???????????????????bug???

??????1????????????????????????????????棬?????????????????????????????????????????????????????????????????????????????free???????????????????????????


free(p); p = NULL;


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

??????2????д??overwrite???????????????д??????????????????????????д??????????д?Щ???????????????????????????????д???????????????????????


p=malloc(256);p[-1]=0;p[256]=0;


??????3??????????????????????????????Σ?????????δ?????malloc???????棬?????????????е???棬??????????Ч??????????????????????????й????????? for(p=start;p=p->next) ??????????е????????????????????????? free(p) ????????????????????????????????????????????н?????ò???????????2???????????

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


struct node *p?? *tart?? *temp;
for(p = start; p ; p = temp)
{
    temp = p->next;
    free(p);
}