C++ 为什么这个输出是“a”;总线错误:10“;在boost程序(boost::filesystem)中?
我成功地编译了这个问题的程序,但是,输出结果显示比预期的要多C++ 为什么这个输出是“a”;总线错误:10“;在boost程序(boost::filesystem)中?,c++,macos,boost,g++,boost-filesystem,C++,Macos,Boost,G++,Boost Filesystem,我成功地编译了这个问题的程序,但是,输出结果显示比预期的要多 Folder status: 0 Bus error: 10 第一行是唯一的预期结果。我不明白为什么第二个会来 我通过gdb获得以下调试信息: (gdb) run Starting program: /Users/ZL/Desktop/mtfsg Reading symbols for shared libraries ++++............................. done Folder status: 0
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
(gdb)运行
启动程序:/Users/ZL/Desktop/mtfsg
读取共享库的符号+++。。。。。。。。。。。。。。。。。。。。。。。。。。。。。完成
文件夹状态:0
程序接收到信号EXC_访问错误,无法访问内存。
原因:地址0x00007fff5fc005a0处的内核保护失败
std::basic_字符串中的0x00007fff9046aab7::~basic_字符串()
(gdb)英国电信
#std::basic_字符串中的0 0x00007fff9046aab7::~basic_字符串()
#1 0x00000001000018dd位于m.cpp:12处的主管道()中
最后,我在代码中找到了错误点:
在类OSxFS(tfs.h文件)中,方法“string ShowStatus()”的返回类型“string”不正确。此方法不需要返回值,因为其功能仅用于在屏幕上打印目录(文件夹)状态。因此,我将“string”返回类型替换为“void”
方法“string ShowStatus()的原始代码
**字符串**ShowStatus()
{
boost::filesystem::file_status folderStatus=
boost::filesystem::status(mFolderPath);
尝试
{
CouTyt是一个bug。你需要调试它来找出问题所在。在你喜欢的调试器下运行程序。但是有什么建议在G++命令行编译器下调试?还是在Mac OS X下?我在C++中调试的经验很少。在 GBD 下运行程序。当崩溃时,键入<代码>哪里< /COD>。code>up
和down
导航堆栈帧,并print
查看内容值。我通过gdb获取调试信息。请查看问题区域中添加的信息。
**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;
}
}