Zol*_*ern 1 c++ iterator runtime-error segmentation-fault
我有一个输入迭代器,CSVIterator如本SO 答案中所定义.
在我的程序中,我现在想要在函数中返回这样的迭代器并在我的函数中使用它main().返回迭代器,我可以访问其内容.但是在尝试迭代时,我遇到了分段错误.在返回函数内迭代起作用.
我有两个问题:
为什么我遇到了seg故障?我认为它是范围问题,但是不应该已经访问迭代器的内容导致分段错误?
我的问题怎么解决?我们的想法是在正确的迭代中将打开的文件切换到更大的循环中,并始终从该特定文件的开头开始.我来自Python背景和yield文件的一行之后另一个对我来说很自然,但也许在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;
}
Run Code Online (Sandbox Code Playgroud)
是的,因为file是一个局部变量.这意味着你正在迭代超出范围的东西(当函数终止时),这引发了Undefined Behavior,这解释了崩溃.
注意你在链接的答案中file是如何在里面声明的main().
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |