关闭ifstream后,矢量下标超出范围

时间:2016-03-28 12:54:46

标签: c++ file stl copy fstream

尝试使用ifstream读取文件。我遇到以下错误: 矢量下标超出范围 这种情况发生在我到达打开文件的结束语句之前,删除它不会导致异常。 以下是一些示例代码:

#include <fstream>
#include <algorithm>
#include <vector>
#include <string>
#include <iterator>
#include <sstream>
#include <iostream>

using namespace std;

int main()
{
    ifstream ifile("myswearwords.txt");

    if (!ifile.is_open())
    {
        cerr << "File not found!\n";
        return false;
    }

    std::vector<std::string> myswearswords;
    std::copy(std::istream_iterator<std::string>(ifile),
        std::istream_iterator<std::string>(),
        std::back_inserter(myswearswords));

//  ifile.close(); -> exception rased, when I reach th ebrakpoint at this point

/// do further work
return 0;
}

有人能解释我这里的错误吗?

1 个答案:

答案 0 :(得分:0)

您发布的代码存在一些编译时问题:

  1. 您没有#include <iostream>
  2. int main()
  3. 之后,您没有立即打开大括号
  4. 您未声明ifstream ifile
  5. 所有这些都得到了纠正,代码运行良好:http://ideone.com/mzOyE2

    将数据复制到myswearswords后,ifilemyswearswords之间不会保留连接。所以你不应该看到这个错误。

    现在很明显,如果你甚至可以编译,你还没有向我们展示你所有的实际代码。实际的错误可能出现在未显示的代码部分。

    顺便提一下,您可以使用vector构造函数rater来改进代码,而不是随后复制到myswearswords

    const vector<string> myswearswords{ istream_iterator<string>(ifile), istream_iterator<string>() };