为什么该输出是 boost 程序 (boost::filesystem) 中的"Bus error: 10"?

Why is that output a "Bus error: 10" in a boost program (boost::filesystem)?

本文关键字:boost 中的 Bus error filesystem 输出 程序 为什么      更新时间:2023-10-16

我在"如何将字符串类型的路径传递到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;
      }
    }