2 baidu 28411433 baidu_28411433 于 2015.06.16 12:21 提问

switch函数有错,执行case0后执行case1有错

int main()
{

int c; //开关控制变量
char m; //继续或退出控制变量
ALGraph G;

init_ALGraph(G); //初始化图

CreateUDN(G); //创建图
PrintAdjList(G); //打印图
//DFSTraverse(G,0); //深度优先搜索
menu();
cout<<"请输入一个游戏控制变量m:m为y或Y表示继续游戏,N或n表示退出游戏:";
cin>>m;
while('y'==m||'Y'==m)
{
cout<<"请输入一个整型开关控制变量c(c=0或1):";
cin>>c;
switch(c)
{
case 0:
{

            //求两点之间的简单路径
            char ch1,ch2;
            char *path;        //存放路径
            path=(char *)malloc(MAX_VERTEX_NUM*sizeof(char));

            cout<<"please input two points:"<<endl;
            cin>>ch1>>ch2;
            simple_Path(G,ch1,ch2,path);

            int i=0;
            while(path[i])
                cout<<path[i++];    //输出路径
            cout<<endl;
            break;
          }
       case 1:
          {
            //求点到点的最短路径
           char cha,chb;
           char *s_path;        //存放路径
           s_path=(char *)malloc( MAX_VERTEX_NUM*sizeof(char) );

           cout<<"please input two points:"<<endl;
           cin>>cha>>chb;
           short_Path(G,chb,cha,s_path);    //广度优先搜索

           int n=0;
           while(s_path[n])
              cout<<s_path[n++];    //输出路径
           cout<<endl;
           break;
          }
      default:
        cout<<"输入错误:"<<endl;
      }
    cout<<"是否继续游戏:Y,y表示继续游戏,N,n表示退出游戏:";
    cin>>m;
    }
return 0;

}

8个回答

gamefinity
gamefinity   Rxr 2015.06.16 12:43

path在malloc之后没有free;
执行case0后执行case1是什么意思没有明白case0和case1只会执行一个啊。

91program
91program   Ds   Rxr 2015.06.16 12:53

case 0 和 case 1 两个分支,只有 G 变量是公用的,其它变量都有各个分支特有的。
所以,请检查一下执行完 case 0 后 G 变量的数值有没有变化?

malloc 分配的内存,在不使用时必须 free 的,否则会产生内存泄露。另外,分配来的空间必须手动清零,不清零的话 s_path 中的数值是随机的。

tongyi55555
tongyi55555   2015.06.16 12:55

报的什么错误啊,只看代码看不出来。

jianjian1992
jianjian1992   2015.06.16 13:01

其实就是变量作用域的问题,下面在case 0的代码定义了你的路径对吧,但它是在case 0里定义的局部变量,所以再一次循环跑到case 1里边运行的时候,
这些局部变量就已经消亡了,

char ch1,ch2;
char *path;        //存放路径
        path=(char *)malloc(MAX_VERTEX_NUM*sizeof(char));

        cout<<"please input two points:"<<endl;
        cin>>ch1>>ch2;

所以

char ch1,ch2;
char *path;
要放在while循环之外定义的。

wsh1992o
wsh1992o   Rxr 2015.06.16 13:21

break不是应该在case外面且紧接之后么

dominating413421391
dominating413421391   2015.06.17 00:00

把局部变量作全局变量试试

q3733353520
q3733353520   2015.06.18 15:19

觉得应该还是没有free的问题吧

zhangweilst
zhangweilst   2015.06.19 12:28

有什么错误?逻辑错还是语法错。内存泄露不至于搞出错误来,并且程序退出后系统自动收回。

Csdn user default icon
上传中...
上传图片
插入图片