| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1489 人关注过本帖
标题:free 时出现问题
取消只看楼主 加入收藏
fantasy_______
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2008-9-21
收藏
 问题点数:0 回复次数:5 
free 时出现问题
graph *edge2;

edge2=(graph *)malloc(sizeof(graph)*e);

free(edge2);

这里free错了吗,为什么会出问题
搜索更多相关主题的帖子: free 
2008-12-14 20:15
fantasy_______
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2008-9-21
收藏
得分:0 
应该是free(地址);没错啊,郁闷那
2008-12-14 21:22
fantasy_______
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2008-9-21
收藏
得分:0 
void reform_map(graph *edge,int e)
{
    int i,j,k;
    int start,end;
    graph *edge2;
    char ch;
    edge2=(graph *)malloc(sizeof(graph)*e);//创建一个地图数组的副本
    for (i=1;i<=e;i++)
        edge2[i]=edge[i];
    int v1,v2;
    printf("                      请输入要删除的边:");
    scanf("%d,%d",&v1,&v2);
    for (i=1;i<=e;i++)
    {
        if (edge2[i].v1==v1&&edge2[i].v2==v2||edge2[i].v1==v2&&edge2[i].v2==v1)
        {
            if (edge2[i].weight==0)
            {
                printf("                      该边不在最小生成树中,按任意键继续......");
                getchar();
                return ;
            }
            edge2[i].flag=2;
            MFSet_initial();//重新初始化root数组
            for (j=1;j<=e;j++)//重新构造root数组
            {
                if(edge2[j].flag==1)
                {
                    start=MFSet_find(root,edge[j].v1);
                    end=MFSet_find(root,edge[j].v2);
                    MFSet_merge(root,start,end);
                }
            }
            for (k=1;k<=e;k++)
            {
                if(edge2[k].flag==0)
                {
                    start=MFSet_find(root,edge2[k].v1);
                    end=MFSet_find(root,edge2[k].v2);
                    if(start!=end)
                    {
                        MFSet_merge(root,start,end);
                        printf("                      在%d和%d之间铺设线路,权值为%d\n",edge2[i].v1,edge2[i].v2,edge2[i].weight);
                        edge2[k].flag=1;
                        printf("                      需要打印修改后的最小生成树吗(y/n):");
                        fflush(stdin);
                        ch=getch();
                        if (ch=='y'||ch=='Y')
                        print(edge2,e);
                        free(edge2);
                        return ;
                    }
                    
                }
            }

        }
    }
    printf("                      未找到该条线路,按任意键继续......");
    free(edge2);
    fflush(stdin);
    getch();
}

注释写少了,大家就看看free()有什么错吧
2008-12-14 22:18
fantasy_______
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2008-9-21
收藏
得分:0 
回复 第9楼 debroa723 的帖子
free()中的参数必须是个指针,edge[i]是结构体变量,编译通过不了
2008-12-14 22:28
fantasy_______
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2008-9-21
收藏
得分:0 
哎呀,实在不好意思,犯了低级错误!!!
我第一个数组空间没用,应该是edge2=(graph *)malloc(sizeof(graph)*(e+1));
溢出咯,呵呵
2008-12-14 22:29
fantasy_______
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2008-9-21
收藏
得分:0 
回复 第12楼 debroa723 的帖子
我改过来以后可以了,谢谢帮助
2008-12-14 22:34
快速回复:free 时出现问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012263 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved