C++:未处理的异常:std::out_of_range 在内存位置
C++: Unhandled exception: std::out_of_range at memory location
目前正在学习 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;
在 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;
}
}
目前正在学习 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;
在 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;
}
}