问题遇到的现象和发生背景
在一个结构体内嵌套一个结构体指针,给嵌套的结构体指针开辟空间,free时失败。
问题相关代码,请勿粘贴截图
typedef struct {
char *memory;
size_t size;
}MemoryStruct;
typedef struct{
Xml_cb cllbackFuntion;
void *pArgs; //for register buffer
MemoryStruct *pData;
char *KeySet;
MS_U32 u32KeySetSize;
}XML_PARSER_PARAM;
MS_BOOL _XML_Parse(MemoryStruct pData)
{
MS_BOOL bRet = FALSE;
MS_U32 u32SpecificKeySetSize;
XML_PARSER_PARAM *xData = NULL;
char *u8SpecificKeySet[]=
{
"cdbs:Root",
"cdbs:RootMenu",
"cdbs:Menu",
"cdbs:Image",
"cdbs:Text",
"cdbs:Table",
"cdbs:Head",
"cdbs:Content",
"cdbs:Title",
"cdbs:ColorMode",
"cdbs:ColorSelect",
"cdbs:ColorSectionS",
"cdbs:ColorSectionN",
"cdbs:ColorTitleS",
"cdbs:ColorTitleN",
"cdbs:ColorText",
"cdbs:ColorTableL",
"cdbs:ColorTableH",
"cdbs:ColorTableC",
};
u32SpecificKeySetSize = sizeof(u8SpecificKeySet)/sizeof(MS_U8*);
memset(&stxmlList, 0, sizeof(stXMLList));
xData = (XML_PARSER_PARAM *)malloc( sizeof(XML_PARSER_PARAM) );
if(xData == NULL)
goto fail;
xData->pData = (MemoryStruct *)malloc( sizeof(MemoryStruct) );
if(xData->pData == NULL)
goto fail;
xData->cllbackFuntion = _XML_Cuba_List;
xData->pArgs = &stxmlList;
xData->pData->size = pData.size;
xData->pData->memory = pData.memory;
xData->KeySet = (char*)u8SpecificKeySet;
xData->u32KeySetSize = u32SpecificKeySetSize;
bRet = App_XMLParser(xData);
free( (xData->pData) );
(xData->pData)=NULL;
free( xData );
xData=NULL;
if(xData->pData==NULL)//----------->该指针不等于NULL,free失败
printf("\n@@@@ xData->pData free succeed@@@@\n");
else
printf("\n @@@ xData->pData free fail @@@@\n");
if(xData==NULL)
printf("\n@@@@ xData free succeed@@@@\n");
else
printf("\n @@@ xData free fail @@@@\n");
return bRet;
fail:
if(xData->pData != NULL)
free(xData->pData);
if(xData != NULL)
free(xData);
return FALSE;
}
viod main(void)
{
MemoryStruct xmlData;
xmlData=Mapp_GetFile_Data(global_f,(U8 *)buf,sizeof(buf)/sizeof(char)-1);
_XML_Parse_Cuba(xmlData);
}
运行结果及报错内容
xData->pData free后没有变为NULL
我的解答思路和尝试过的方法
我想要达到的结果
xData->pData free后要变成NULL指针