获取运行时错误C ++

时间:2014-08-26 12:11:07

标签: c++

我正试图从SPOJ解决这个问题 http://www.spoj.com/problems/PALIN/

这是我的代码 http://ideone.com/03Dd8u

#include<iostream>
#include<vector>
typedef unsigned int ui;

using namespace std;

ui revNum(ui a)
{
   ui rev,tmp=a;
   while(tmp>0){
      rev=rev*10+(tmp%10);
      tmp=tmp/10;
   }
   return rev;
}

ui palin(ui k)
{
   ui num=k,rev=revNum(num);
   while(num!=rev){
      num++;
   }
   return num;
}

int main()
{
   ui t,out;
   vector<ui> k;
   cin>>t;
   for(ui i=0;i<t;i++){
      cin>>k[i];
      out=palin(k[i]);
      cout<<out<<endl;
   }
   return 0;
}

但我不断收到运行时错误。有人可以在我的代码中识别错误吗?

3 个答案:

答案 0 :(得分:2)

您正在引用不存在的向量中的索引。这一行:

cin>>k[i];

插入带索引i的向量,但该索引不存在。 []运算符不执行边界检查。

尝试将代码更改为:

ui tmp;
cin >> tmp;
k.push_back(tmp);

如您所见:http://en.cppreference.com/w/cpp/container/vector/operator_at边界检查未执行。

答案 1 :(得分:2)

我只能看到一个明显的错误,那就是

cin >> k[i];

在这一行中,您似乎访问了一个数组元素,但是数组元素还没有存在。要添加到矢量,请使用push_back - 方法,如下所示:

ui in;
cin >> in;
k.push_back(in);

从那时起,您可以访问k [i],因为数组元素现在存在。

或者,根本不要使用矢量。

for(ui i=0;i<t;i++){
    ui in;
    cin >> in;
    out = palin(in);
    cout<<out<<endl;
}

请参阅?无需矢量。

答案 2 :(得分:1)

你的问题在这里:

vector<ui> k;
   cin>>t;
   for(ui i=0;i<t;i++){
      cin>>k[i];

您永远不会在k中分配任何空格。为了安全起见,您可以使用k.at(i),如果空间不存在,将引发异常。在循环之前,您可以k.resize(t)