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;
      }
    }