C++ 如何在C++;?

C++ 如何在C++;?,c++,iterator,segmentation-fault,runtime-error,C++,Iterator,Segmentation Fault,Runtime Error,我有一个输入迭代器CSVIterator,如本SO中所定义 在我的程序中,我现在想在函数中返回这样一个迭代器,并在我的main()中使用它。迭代器被返回,我可以访问它的内容。但在尝试迭代时,我遇到了一个分段错误。在返回函数中进行迭代是有效的 我有两个问题: 为什么我会遇到seg故障?我认为这是一个范围问题,但是对迭代器内容的访问不应该已经导致分段错误吗 我的问题怎么解决?其思想是在一个更大的循环中,在正确的迭代中切换打开的文件,并始终从该特定文件的开头开始。我来自Python背景和Ford一条文

我有一个输入迭代器
CSVIterator
,如本SO中所定义

在我的程序中,我现在想在函数中返回这样一个迭代器,并在我的
main()
中使用它。迭代器被返回,我可以访问它的内容。但在尝试迭代时,我遇到了一个分段错误。在返回函数中进行迭代是有效的

我有两个问题:

  • 为什么我会遇到seg故障?我认为这是一个范围问题,但是对迭代器内容的访问不应该已经导致分段错误吗

  • 我的问题怎么解决?其思想是在一个更大的循环中,在正确的迭代中切换打开的文件,并始终从该特定文件的开头开始。我来自Python背景和Ford<代码>一条文件,在另一个文件对我来说是自然的,但是它可能不被C++所推荐?

  • 这是密码

    // For the definition of CSVIterator, see
    // https://stackoverflow.com/a/1120224/2525159
    CSVIterator fileIter(int time)
    {
        std::string tstring = std::to_string(time);
        std::string ext = ".csv";
        std::ifstream file(tstring + ext);
        CSVIterator iter(file);
        // This would work:
        // ++iter;
        return iter;
    }
    
    int main()
    {
        CSVIterator csvit;
        for (i=0; i<10000; i++) {
            if (i%20 == 0) {
                csvit = fileIter(i);
            }
    
            // I can access the iterator's contents
            // like (*csvit)[0] correctly.
            // However,iterating in here doesn't work.
            ++csvit; // seg fault here
        }
        return 0;
    }
    
    //有关CSVIterator的定义,请参阅
    // https://stackoverflow.com/a/1120224/2525159
    CSVIterator文件管理器(整数时间)
    {
    std::string tstring=std::to_string(时间);
    std::string ext=“.csv”;
    std::ifstream文件(tstring+ext);
    CSVIterator iter(文件);
    //这将有助于:
    //++iter;
    返回iter;
    }
    int main()
    {
    CSVIterator csvit;
    
    对于(i=0;iYes,因为
    file
    是一个局部变量。这意味着您正在迭代超出范围的内容(当函数终止时),这会引发未定义的行为,从而解释崩溃



    请注意,在您链接的答案中,
    file
    是如何在
    main()

    中声明的,因为
    file
    是一个局部变量。这意味着您正在迭代超出范围的内容(当函数终止时),这会引发未定义的行为,从而解释崩溃



    请注意,在您链接的答案中,
    file
    是如何在
    main()

    中声明的,这很有意义,谢谢!在
    main()
    中定义文件现在起作用了。这很有意义,谢谢!在
    main()
    中定义文件现在起作用了。