【发布时间】:2018-08-27 07:39:10
【问题描述】:
我下面的代码一直遇到分段错误错误,我似乎无法弄清楚原因。请帮忙~~ 我的目标是读取一个文件夹及其所有子文件夹以查找所有以扩展名“.txt”结尾的文件,因此我使用 boost 的递归目录迭代器来帮助完成任务。这个问题突然出现,因为我的代码上周运行良好。
test.cpp:
#include <sstream>
#include <iostream>
#include "/home/dj/boost_1_65_1/boost/filesystem.hpp"
using namespace std;
int main()
{
using namespace boost::filesystem;
recursive_directory_iterator end;
for (recursive_directory_iterator it("./"); it != end; ++it)
{
std::cout << *it << endl;
}
return 0;
}
我在 Linux 上运行,我用 boost 1.65 将我的 test.cpp 编译为静态:
g++ -g -I /home/dj/boost_1_65_1 test.cpp -static -static-libgcc -o delete -static-libstdc++ -std=c++11 -L/home/dj/boost_1_65_1 -lboost_filesystem -lboost_system
使用 gdb 和一些 cout 我发现错误来自下面的行。
for (recursive_directory_iterator it("./"); it != end; ++it)
不知何故,当我调用“recursive_directory_iterator”时,我的系统崩溃并出现此错误
Program received signal SIGSEGV, Segmentation fault.
0x00000000004f1c8b in memcpy ()
即使我将代码简化为,完全相同的错误仍然存在
int main()
{
using namespace boost::filesystem;
recursive_directory_iterator it("./");
return 0;
}
【问题讨论】:
-
试着回想一下你在它停止工作时所做的最后一次更改。
-
其他版本的 Boost 怎么样?
-
@john 我保留了一份工作副本,但即使这样也不起作用
-
Boost.filesystem 库现在是标准库的一部分。你有机会使用 C++17 吗?
-
我无法复制,它对我来说很好用。你确定这不是权限问题吗?您是否尝试过将其作为 sudo 运行?
标签: c++ c++11 boost segmentation-fault