🎶リソースの再開放は危険を伴う行為である。rustは安全か。危険コード cweしらべ
コードは通常、メモリ、ファイル、デバイス、ソケット接続、サービスなどのリソースへのハンドルや参照を「オープン」する必要があります。コードがリソースの使用を終了すると、一般的にリソースを「クローズ」または「リリース」することが期待されます。これは、リソースが無関係のプロセスまたはアクターによって、あるいは場合によっては同じプロセス内で再割り当てまたは再利用できることを環境(OSなど)に示すものです。この解放には、C/C++のfree()やdelete()、多くの言語で使用されているファイルハンドルclose()などのAPI関数やその他の抽象化機能がよく使用されます。
残念ながら、このようなAPIの実装や設計は、開発者がリソースのリリースごとに一度だけAPIが呼び出されることを保証する責任を負うことを期待する場合があります。もし開発者が同じリソース/ハンドルを複数回解放しようとすると、APIの期待に応えられず、未定義かつ/または安全でない動作が発生します。これは、メモリ破壊、データ破壊、実行パスの破壊などの結果につながる可能性があります。
場合によっては、Cライブラリのfclose()関数がエラーをキャッチし、エラーコードを返します。他の実装では、ダブルフリー(CWE-415)が発生し、プログラムがフォールトを起こします。ここで紹介した例は単純化したもので、二重のfclose()呼び出しはプログラム中に頻繁に存在し、コードレビューで見つけるのが難しくなっていることに注意してください。
Rustにはオーナーシップが登場する
お願い致します