我正在使用VS2015 C ++。我尝试使用while循环读取文件并逐行输入到矢量中。
我收到此错误:
Debug Assertion失败!
程序:C:\ Windows \ SYSTEM32 \ MSVCP140D.dll
文件:c:\ program files(x86)\ microsoft visual studio 14.0 \ vc \ include \ vector
行:1234
表达式:向量下标超出范围
有关程序如何导致断言失败的信息,请参阅有关断言的Visual C ++文档。
我的代码如下:
int main() {
std::ifstream inf("walmart2.txt");
std::vector<std::string> blah;
int j = 0;
if (!inf) {
std::cerr<< "Uh oh, walmart2.txt could not be opened for reading!" << std::endl;
exit(1);
}
while (inf)
{
std::string strInput;
inf >> strInput;
blah[j] = strInput;
j = j + 1;
}
std::cout << blah.size() << '\n';
return 0;
}
文件“walmart2.txt”大约是1800行,格式如下:
53.74
54.09
53.5
53.72
53.43
我不完全确定最新情况。任何帮助表示赞赏。
答案 0 :(得分:0)
您正在使用索引blah[j] = strInput;
访问向量,但向量的大小为零。
您可以使用
实现目标 blah.push_back(strInput);
如果你知道他开始的大小,那么你可以做这样的事情。
std::vector<std::string> blah(n); // Vector of size n will be declared
blah[j] = strInput; // 0 <= j < n
答案 1 :(得分:0)
blah[j] = strInput;
这是未定义的行为,因为blah
为空。这意味着编译器可以使程序做任何事情。
使用正确的设置进行编译时,Visual C ++会利用C ++标准中的未定义行为来实际检测错误并向您显示此错误消息。
使用push_back
代替修复错误:
blah.push_back(strInput);
答案 2 :(得分:0)
使用push_back代替operator []在您的向量中添加值:vec.push_back(input);