【问题标题】:an error i can't seem to find [closed]我似乎找不到的错误[关闭]
【发布时间】:2015-06-04 21:11:00
【问题描述】:

我是一个初学者,还在学习 C++。我在玩向量,看看会发生什么。每当我开始时,它都会给我一个调试错误。 这是代码

int main()
{

    vector<int> num;
    int i = 0;
    while (i != 1000)
    {
        ++i;
        num.push_back(i);
        cout <<num[i]<<"\t"<< sqrt(num[i]) << "\n";
    }
}

【问题讨论】:

  • 您遇到的错误是什么?
  • 请调试并检查与 cout 索引超出范围的行上的向量大小。
  • 向量是从零开始的。

标签: c++ visual-studio


【解决方案1】:

问题在于while()循环内部的操作顺序:

while (i != 1000)
{
    ++i;
    num.push_back(i);
    cout <<num[i]<<"\t"<< sqrt(num[i]) << "\n";
}

i 从 0 开始。在每次迭代中,您 push_back 一个元素,然后使用计数器 i 打印它 - 它的增量之后。所以,num[i] 指的是一个不存在的元素。

将您的代码更改为:

while (i < 1000)
{
    num.push_back(i + 1);
    cout <<num[i]<<"\t"<< sqrt(num[i]) << "\n";
    ++i;
}

【讨论】:

  • 谢谢,你不仅解决了我的问题,还让我明白了。
【解决方案2】:

向量的索引从零开始。在您的代码中,您总是在更新(或推送)之前访问 1 个索引。

【讨论】:

    【解决方案3】:

    当我在两个语句之后增加 i 时,它工作正常。 我不知道如何,但它工作得很好。 谢谢大家。

         int main()
     {
    
        vector<int> num;
        int i = 0;
        while (i != 1000)
        {
            num.push_back(i);
            cout <<num[i]<<"\t"<< sqrt(num[i]) << "\n";
            ++i;
        }
     }
    

    【讨论】:

      【解决方案4】:

      确保您正在使用

      #include<vector>
      #include<iostream>
      using namespace std;
      

      【讨论】:

      • 我使用#include没有问题,Visual Studio在调试前可以检测到
      • 错误是R6010 abort()已被调用
      猜你喜欢
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多