C++:未处理的异常:std::out_of_range 在内存位置

时间:2021-02-09 18:54:56

标签: c++ c++14

目前正在学习 C++ 构建一个小程序,该程序接收电影名称,将它们存储在一个向量中,然后根据用户输入输出它。问题是我做了一个显示电影列表的功能。现在每次运行该函数时都会出现此错误:

ConsoleApplication2.exe 中 0x769DA842 处未处理的异常:Microsoft C++ 异常:std::out_of_range 在内存位置 0x0113F674。

代码如下:

#include <iostream>
#include <vector>

std::vector <std::string> movieList;
std::vector <int>::iterator it;

void AddMovie(std::string movie)
{
    movieList.push_back(movie);
}

void DeleteMovie(int i)
{
    movieList.erase(movieList.begin() + i - 1);
}

void ShowMovies()
{
    for (int i = 0; movieList.size() > 1; i++)
    {
        std::cout << movieList.at(i) << std::endl;
    }
}

int main()
{

    int i{ 0 };

    movieList.push_back("Inception");
    movieList.push_back("Peter Pan");
    movieList.push_back("Jaws");

    std::cout << "Delete movie: ";
    std::cin >> i;
    DeleteMovie(i);
    ShowMovies();

    
}

错误在行处中断

<块引用>

std::cout << movieList.at(i) << std::endl;

1 个答案:

答案 0 :(得分:1)

在 for 循环中,条件 movieList.size() > 1 始终为真(如果列表中有不止一部电影),因此您将 i 增加到超出列表,访问超出向量范围的内存。

这个例子应该可以工作,因为变量 i 只在循环体中使用,直到它达到 movieList.size() - 1(正如上面@user4581301 评论的那样,它被增加到 movieList .size(),但循环体中不使用最后一个值):

void ShowMovies()
{
    for (int i = 0; i < movieList.size(); i++)
    {
        std::cout << movieList.at(i) << std::endl;
    }
}