none
a debug question between VS2008 and VS2010 RRS feed

  • 问题

  • Today I program the following C++ codes and meet a problem when debugging in VS2010. 

    The codes are:

    #include<iostream>

    #include<string>

    using namespace std;

    bool check(int i,int j,int x,int y,string str1,string str2);

    void main()

    {   

    int k=0;

    int count=0;

    bool m=true;

    string str1="abc";

    string str2="abcabab";

    int L1=str1.length ();

    int L2=str2.length ();

      for(int i=k;i<L2;i++)

      {

    if(str1[0]==str2[i])

    { k=i;

              if(str1[L1-1]==str2[k+L1-1])

          m=check(0,L1-1,k,k+L1-1,str1,str2);

          else m=false;

      if(m==true)

      count++;

               k++;

    }

      }

    cout<<count<<endl;

    }

    bool check(int i,int j,int x,int y,string str1,string str2)

    {   

    while(i<j)

    {

    if(str1[(i+j)/2]==str2[(x+y)/2])

    { return true;

      check(i,(i+j)/2,x,(x+y)/2,str1,str2);

      check((i+j)/2,j,(x+y)/2,y,str1,str2);

    }

    else

    return false;

    }

    }

    When I run it in VS2010, it shows a error messages about "string subscript out of range" in line1441 of include\xstring. 

    However, everything is OK when I run the same codes in VS2008 and it shows the result: 1. 

    I have no idea what makes it different between vs2008 and vs2010. 

    Could help me to solve this codes? Thanks.

    2011年2月26日 14:50

答案

  • 代码中有明显的下标访问越界的情况,VS2010能正确指出来是好事。

    另:请最好用中文提问。

    2011年3月2日 6:40
  • 谢谢你的回复。以上程序段是我的一个本科同学写的,现已自行解决。
    2011年3月3日 12:00
  • 代码中有明显的下标访问越界的情况,VS2010能正确指出来是好事。

    另:请最好用中文提问。


    “下标访问越界”的情况出现在:

    正如Igor Tandetnik在英文论坛所说的那样“For large enough values of k, k+L1-1 is beyond the size of str2.”

    2011年3月3日 14:01

全部回复