1

文字列型のパスをboost::filesystem:pathのコンストラクターに渡す方法についての質問でプログラムを正常にコンパイルしました。ただし、出力結果は予想よりも多く表示されます。

Folder status: 0
Bus error: 10

最初の行が唯一の期待される結果です。なぜ2つ目が来るのかわかりませんか?

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
4

1 に答える 1

0

最後に、コードにエラーのポイントがあります。

クラスOSxFS(tfs.hファイル)で、メソッド "string ShowStatus()"の戻りタイプ"string"が正しくありません。このメソッドの機能はディレクトリ(フォルダ)のステータスを画面に出力することだけなので、このメソッドは戻り値を必要としません。そこで、「string」の戻り型を「void」に置き換えます。

メソッド「stringShowStatus()」の元のコード

**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;
      }
    }
于 2012-08-22T08:32:07.567 に答える