程序其他部分没给出,先请帮忙看看这个函数!
void Coding(Htree* Ht,string &c,char e,int len)
{
string s;
char r;
Htree* v=Ht;
int i=0;
for(;i<len;i++)
{
if(v[i].key==e)
break;
}
while(v[i].parent!=0)
{
if(i==v[v[i].parent].lchild)
s+="0";
else
s+="1";
i=v[i].parent;
}
int k=s.size();
for(;k>=0;k--)
{
r=s[k];
s[k]=s[s.size()-k];
s[s.size()-k]=r;
}
c+=s;//加上这句后程序就出错,去掉后就没问题了!
}

解决方案 »

  1.   

    void Coding(Htree* Ht,string &c,char e,int len) 

      string s; 
      char r; 
      Htree* v=Ht; 
      int i=0; 
      for(;i <len;i++)  //这个不防改成:for(;i<len && v[i].key!=e;i++);
      {                        //
        if(v[i].key==e)        //
        break;       
      } 
      while(v[i].parent!=0) 
      { 
        if(i==v[v[i].parent].lchild) 
           s+="0"; 
        else 
           s+="1"; 
        i=v[i].parent; 
       } 
      int k=s.size(); 
      for(;k>=0;k--)        //请问一下这个循环是什么作用?
      { 
        r=s[k];            //当k=s.size()时,首尾两个元素进行一次交换    s[k]=s[s.size()-k]; //当k=0时,首尾两个元素又进行一次交换    s[s.size()-k]=r;    //这个for下来,s中什么都没有变。  } 
                          //不防改成:for(;k>s.size()/2;k--){...}
      c+=s;//加上这句后程序就出错,去掉后就没问题了! 
    }
      

  2.   

    1.一个问题:
          for(;i <len;i++) 
          { 
          if(v[i].key==e) 
            break; 
           } //如果找不到,i的值是len ?那么v[len]是否溢出?
    while(v[i].parent!=0) 2.
    int k=s.size(); //如果CString是从0开始,那么s.size()为长度,最后一个char ,是否应为s[s.size()-1]
    for(;k>=0;k--) 

    r=s[k]; 
    s[k]=s[s.size()-k]; 
    s[s.size()-k]=r; 

    粗略看出来的错误?
      

  3.   


      c+=s;//加上这句后程序就出错,去掉后就没问题了!
      c+=s;//中的操作仅仅只是将s链接到c后面去,然而你的S却只是在本函数中的局部变量,当你加上这句后,函数执行完毕,C中就少了字符串的结束字符'\0',那样当然会出错了呀。建议用NEW后再进行+=操作。  
      

  4.   

    似乎是内存的问题!溢出了!请问一个string串溢出后该怎么办?我想用这一个串存很长一段字符!
      

  5.   


    三十几个字符的话,可以用CString这个类,或者你自己定义一个char*型的串,足够长就行了。呵呵。