string.at()引起的std :: out_of_range错误

时间:2014-06-09 13:49:56

标签: c++ string runtime-error outofrangeexception

我有这段代码:

int n,m; // n - rows count , m - columns in each row count
cin >> n >> m;
string wiersze[n];
int wynik=0;
for(int i = 0; i < n;i++)
{
    cin >> wiersze[i];
}
for(int i = 0; i < n;i++)
{
    for(int j =0; j<m-1;j++)
    {
        cout << j << " " << j+1<<endl; // debbuging line 
        cout<<wiersze[i].at(j)<<wiersze[i].at(j+1)<<endl;   // debbuging line       
        if(wiersze[i].at(j) == wiersze[i].at(j+1))wynik++;
    }
}

如果字符串中有两个字母,我应该增加变量wynik。 我不知道为什么,但在这个例子上运行该代码:

  

4 4

     

AABA

     

AAAB

     

AABA

     

BBAA

std::out_of_range行的string::at上导致if(wiersze[i].at(j) == wiersze[i].at(j+1))wynik++;错误。

我尝试了debbuging并在循环中添加了两行来查看正在发生的事情。结果:

  

0 1

     

aa

     

1 2 ab

     

2 3

     

ba

     

0 1

     

aa

     

1 2

     

aa

     

2 3

     

ab

     

0 1

     

aa

     

1 2

     

ab

     

2 3

     

ba

     

0 1

     

bb

     

1 2

     

ba

     

2 3

     

AA

请看最后两行 - 它确切地显示了下一行的计算不存在!当然,我试图寻找&#34;愚蠢的&#34;错误和小调试,但没有任何结果exepct,你可以看到上面。请帮我处理。

1 个答案:

答案 0 :(得分:0)

首先,你不能像你那样为数组分配内存。在wiersze[n]变量中,n必须在编译时知道,但在这里它不是。您必须动态初始化数组:

string* wiersze = new string[n];