C语言结构体问题

muzhifantong 2011-10-07 08:31:07
C语言中,十字链表,主链释放后,其支链是否还占内存。
...全文
68 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2011-10-07
  • 打赏
  • 举报
回复
一个 malloc 对应一个free

先申请的后释放
muzhifantong 2011-10-07
  • 打赏
  • 举报
回复
谢谢了。我去看看了。
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 muzhifantong 的回复:]

int CreatList(MEDIA_INF **phead)
{
MEDIA_INF *hd = NULL, *pmediainfo;
BASED_INF*pbasedinfo;
CONTROL_INF *pcontrolinfo;
FILE *pFile;
int find;
int re = 0;

if ((pF……
[/Quote]
恩,对

然后你要判断有没有释放你的支链,你可以按照你代码的逻辑,看看在支链的时候有没有调用free函数
aizibion 2011-10-07
  • 打赏
  • 举报
回复
肯定在,没有人会蠢到在数据结构中定义号这个链表所有的节点。
muzhifantong 2011-10-07
  • 打赏
  • 举报
回复
int CreatList(MEDIA_INF **phead)
{
MEDIA_INF *hd = NULL, *pmediainfo;
BASED_INF*pbasedinfo;
CONTROL_INF *pcontrolinfo;
FILE *pFile;
int find;
int re = 0;

if ((pFile = fopen(gp_media_info_filename, "rb")) == NULL)
{
printf("媒体信息数据文件打开失败!\n");
return re;
}
printf("媒体信息数据文件打开成功!\n");

/*从数据文件中读媒体基本信息数据,存入以后进先出方式建立的主链中*/
while (!feof(pFile))
{
pmediainfo = (MEDIA_INF *)malloc(sizeof(MEDIA_INF));
fread(pmediainfo, sizeof(MEDIA_INF), 1, pFile);
pmediainfo->snext = NULL;
pmediainfo->next = hd;
hd = pmediainfo;
}
fclose(pFile);

if (hd == NULL)
{
printf("媒体基本信息数据文件加载失败!\n");
return re;
}
printf("媒体基本信息数据文件加载成功!\n");
*phead = hd;
re += 4;

if ((pFile = fopen(gp_information_info_filename, "rb")) == NULL)
{
printf("案件基本信息数据文件打开失败!\n");
return re;
}
printf("案件基本信息数据文件打开成功!\n");
re += 8;

/*从数据文件中读取媒体基本信息数据,存入主链对应结点的案件基本信息支链中*/
while (!feof(pFile))
{
/*创建结点,存放从数据文件中读出的案件基本信息*/
pbasedinfo= (BASED_INF *)malloc(sizeof(BASED_INF));
fread(pbasedinfo, sizeof(BASED_INF), 1, pFile);
pbasedinfo->cnext = NULL;

/*在主链上查找该案件编号对应的主链结点*/
pmediainfo = hd;
while (pmediainfo != NULL
&& strcmp(pmediainfo->number,pbasedinfo->number) != 0)
{
pmediainfo = pmediainfo->next;
}
if (pmediainfo != NULL) /*如果找到,则将结点以后进先出方式插入案件基本信息支链*/
{
pbasedinfo->next = pmediainfo->snext;
pmediainfo->snext = pbasedinfo;
}
else /*如果未找到,则释放所创建结点的内存空间*/
{
free(pbasedinfo);
}
}
fclose(pFile);

if ((pFile = fopen(gp_place_info_filename, "rb")) == NULL)
{
printf("所属省份信息数据文件打开失败!\n");
return re;
}
printf("所属省份信息数据文件打开成功!\n");
re += 16;

/*从数据文件中读取所属省份信息数据,存入案件基本信息支链对应结点的缴费支链中*/
while (!feof(pFile))
{
/*创建结点,存放从数据文件中读出的所属省份信息*/
pcontrolinfo = (CONTROL_INF *)malloc(sizeof(CONTROL_INF));
fread(pcontrolinfo, sizeof(CONTROL_INF), 1, pFile);

/*查找案件基本信息支链上对应案件基本信息结点*/
pmediainfo = hd;
find = 0;
while (pbasedinfo != NULL && find == 0)
{
pbasedinfo = pmediainfo->snext;
while (pbasedinfo != NULL && find == 0)
{
if (strcmp(pbasedinfo->province, pcontrolinfo->province) == 0)
{
find = 1;
break;
}
pbasedinfo = pbasedinfo->next;
}
pmediainfo = pmediainfo->next;
}
if (find) /*如果找到,则将结点以后进先出方式插入所属省份信息支链中*/
{
pcontrolinfo->next = pbasedinfo->cnext;
pbasedinfo->cnext = pcontrolinfo;
}
else /*如果未找到,则释放所创建结点的内存空间*/
{
free(pcontrolinfo);
}
}
fclose(pFile);

return re;
}

那这个是在堆上了?
  • 打赏
  • 举报
回复
只要你的支链的节点是malloc生成的,那么就是在堆上
muzhifantong 2011-10-07
  • 打赏
  • 举报
回复
那如何看支链是不是在堆上?
  • 打赏
  • 举报
回复
那就看你的支链是不是在堆上分配的内存

要看释放主链时候,会不会释放支链

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧