尝试运行代码时出错,Range_Error(?)

时间:2015-02-25 16:57:25

标签: codeblocks

我遇到了这个问题,我的程序正常编译但是当我尝试运行它时出错了 “在抛出”Range_error“的实例后终止调用 what():范围错误:0  此应用程序已请求Runtime以不寻常的方式终止它。“

出现了。我的代码如下,我使用的是Windows 8,并使用GNU GCC编译器在CodeBlocks 13.12中进行编码。

> #include <iostream>  #include <vector>  #include <string>  #include "std_lib_facilities.h"
> 
> using namespace std;
> 
> class Name_pairs{
>         vector<string> name;
>         vector<double> age;
> 
>     public:
>         void read_names()
>         {
>         string control="yes";
>         int i=0;
>         while(control!="no")
>         {
>             cout<<"Insert a name "<<endl;
>             cin>>name[i];
>             cout<<"Do you want to introduce another name?"<<endl;
>             cin>>control;
>         }
>         }
>         void read_ages()
>         {
>             for(int i=0; i<=name.size();i++)
>             {
>                 cout<<"introduce an age for "<<name[i]<<endl;
>                 cin>>age[i];
>             }
>         }
>         void print()
>         {
>             for(int i=0;i<=name.size();i++)
>                 {
>                     cout<<name[i]<<", "<<age[i]<<endl;
>                 }
>         }
>         void Sort()
>         {
>             string tempn;
>             double tempa;
>             for(int i=0; i<name.size();i++)
>             {
>                 for(int j=i+1;j<name.size();j++)
>                 {
>                     if(name[i]>name[j])
>                     {
>                         tempn=name[i];
>                         tempa=age[i];
>                         name[i]=name[j];
>                         age[i]=age[j];
>                         name[j]=tempn;
>                         age[j]=tempa;
>                     }
>                 }
>             }
>         }
>     }; int main() {
>     Name_pairs List;
>     List.read_names();
>     List.read_ages();
>     List.Sort();
>     List.print();
>     return 0; 
>         }

如果有人可以提供帮助,请:D提前致谢。

1 个答案:

答案 0 :(得分:0)

cin>>name[i];

i为空时,您正在分配向量name的元素name 并没有元素。如果存在此类元素,则只能指定somevector[i]。做

string s;
cin >> s;
name.push_back(s);

在最后添加一个新元素。

(顺便说一下,你永远不会在i中增加read_names,所以每个名字都是如此 将被分配到name[0],甚至覆盖以前的名称 如果元素name[0]存在。)

此外,循环如下:

for(int i=0; i<=name.size();i++)

推进i向量的第N个元素是N个元素的长度。 最后一个元素的索引是N - 1,所以它们超过了 向量。应该是:

for(int i=0; i < name.size();i++)

就像你在Sort()

中一样