为什么该输出是 boost 程序 (boost::filesystem) 中的"Bus error: 10"?
Why is that output a "Bus error: 10" in a boost program (boost::filesystem)?
我在"如何将字符串类型的路径传递到boost::filesystem:path';s构造函数?然而,输出结果显示的内容比预期的要多。
Folder status: 0
Bus error: 10
第一行是唯一的预期结果。我不明白为什么第二个会来?
我通过gdb获得以下调试信息:
(gdb) run
Starting program: /Users/ZL/Desktop/mtfsg
Reading symbols for shared libraries ++++............................. done
Folder status: 0
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00007fff5fc005a0
0x00007fff9046aab7 in std::basic_string<char, std::char_traits<char>,
std::allocator<char>>::~basic_string ()
(gdb) bt
#0 0x00007fff9046aab7 in std::basic_string<char, std::char_traits<char>,
std::allocator<char> >::~basic_string ()
#1 0x00000001000018dd in main () at m.cpp:12
最后,我在代码中找到了错误点:
在类OSxFS(tfs.h文件)中,方法"string ShowStatus()"的返回类型"string"不正确。此方法不需要返回值,因为它的功能只是在屏幕上打印目录(文件夹)状态。因此,我将"string"返回类型替换为"void"。
方法"string ShowStatus()"的原始代码
**string** ShowStatus()
{
boost::filesystem::file_status folderStatus =
boost::filesystem::status(mFolderPath);
try
{
cout<<"Folder status: "<<boost::filesystem::is_directory(folderStatus)<<endl;
}
catch(boost::filesystem::filesystem_error &e)
{
cerr<<"Error captured: "<<e.what()<<endl;
}
}
正确的代码:
**void** ShowStatus()
{
boost::filesystem::file_status folderStatus =
boost::filesystem::status(mFolderPath);
try
{
cout<<"Folder status: "<<boost::filesystem::is_directory(folderStatus)<<endl;
}
catch(boost::filesystem::filesystem_error &e)
{
cerr<<"Error captured: "<<e.what()<<endl;
}
}
相关文章:
- 使用C 中的Boost中的GIL将图像定位在图像中
- STL/Boost 中的函子,从指针中提取值
- 修改filter_iterator谓词以接受BOOST中的两个参数(二进制fn)
- boost中的安全bool成语
- boost中的线程安全可复制循环缓冲区
- BOOST中的属性映射是什么
- C++Boost中的线程数组
- 使文件名保留在boost中的路径中
- 检查boost中的多边形特征
- 如何从旧的元组类型和boost中的类型创建新的元组类型
- 为什么 Folly 的共享库引用了 Boost 中的错误符号?(OS X 上的 GCC)
- 分析boost中的令牌时基础字符串的索引
- 为boost中的动态阵列定义自定义步进器
- c++ Python Boost中的友元函数
- Boost程序选项在从命令行读取数据时更改数据(这是Boost中的错误吗?)
- boost中的无符号长长序列化
- boost中的Load_construct_data:放置new的问题
- 正在同步Boost中的线程
- 使用Boost中的“持续时间”仅合并时间
- 将时间戳(以毫秒为单位)转换为boost中的时区