スキル memory-safety-patterns
🛡️

memory-safety-patterns

安全

メモリ安全性パターンの実装

こちらからも入手できます: wshobson

Rust、C++、Cで実証済みのメモリ安全性パターンを使用して、クラッシュフリーで安全なコードを記述します。RAII、所有権モデル、智能ポインタを使用して、メモリリーク、use-after-free、バッファオーバーフローを防止します。

対応: Claude Codex Code(CC)
🥉 75 ブロンズ
1

スキルZIPをダウンロード

2

Claudeでアップロード

設定 → 機能 → スキル → スキルをアップロードへ移動

3

オンにして利用開始

テストする

「memory-safety-patterns」を使用しています。 C++でファイルを開くときにメモリリークを防ぐ方法は?

期待される結果:

RAIIと智能ファイルラッパークラスまたはstd::fstreamを使用してください。オブジェクトが破棄されると、例外が発生した場合でもファイルは自動的に閉じます。例:std::fstream file("data.txt"); - デストラクタが自動的にクリーンアップを処理します。

「memory-safety-patterns」を使用しています。 RustのBox、Rc、Arcの違いは何ですか?

期待される結果:

Box<T>はヒープ割り当てを持つ単一所有権用です。Rc<T>は共有所有権(単一スレッド)用 - cloneで参照カウントをincrementします。Arc<T>はスレッド間でのアトミック共有所有権用 - スレッドセーフな参照カウントを行います。

「memory-safety-patterns」を使用しています。 境界チェックを安全に処理する方法は?

期待される結果:

C++では、std::out_of_rangeをスローするstd::vector::at()を使用するか、配列ビューにstd::spanを使用してください。Rustでは、[]でのインデックスアクセスは境界外でpanicしますが、.get()は安全な処理のためにOptionを返します。手動の境界チェックを避けるためにイテレータを使用してください。

セキュリティ監査

安全
v1 • 2/25/2026

All 56 static findings are false positives. The skill contains only documentation and code examples for memory safety patterns. Thread spawning (thread::spawn) was misidentified as process spawning. Markdown backticks for code formatting were misidentified as shell execution. Documentation URLs and debugging tool references are legitimate educational content.

2
スキャンされたファイル
640
解析された行数
0
検出結果
1
総監査数
セキュリティ問題は見つかりませんでした
監査者: claude

品質スコア

38
アーキテクチャ
100
保守性
87
コンテンツ
50
コミュニティ
100
セキュリティ
100
仕様準拠

作れるもの

システムプログラミング

メモリ破損脆弱性のないオペレーティングシステム、ドライバー、組み込みソフトウェアを作成します。

セキュリティ重要なアプリケーション

メモリ安全性が必須なアプリケーションを構築します:暗号、ネットワークサービス、ファイル処理。

レガシーコードのモダナイゼーション

C/C++コードベースのリファクタリング時にメモリ安全性パターンを適用して、バグを減らし信頼性を向上させます。

これらのプロンプトを試す

基本的なRAII実装
ファイルハンドラクラスのC++でRAIIパターンを実装する方法を示してください。適切なコピー/移動セマンティクスを含み、オブジェクトがスコープ外に出たときにファイルが自動的に閉じることを確認してください。
Rust所有権の例
Rustの所有権がuse-after-freeバグを防ぐ方法を説明してください。構造体が参照を持つ例を示し、Box、Rc、Arcのどちらを使用するかをLifetime annotation 含めて説明してください。
Cのリソース管理
ファイルを開き、メモリを割り当て、データを処理するC関数を書いてください。goto-cleanupパターンを使用して、エラー時にすべてのリソースが正しく解放されることを確認してください。
スレッドセーフなカウンタ
C++ではアトミックスとmutexを使用し、RustではArcとMutexを使用してスレッドセーフなカウンタを実装してください。各言語がデータ競合をどう防ぐかを示してください。

ベストプラクティス

  • 手動メモリ管理ではなくRAIIと智能ポインタを優先し、自動クリーンアップを確保する
  • Rustではborrow checker と戦うのではなく活用する - 実際のバグを防ぐ
  • 開発時にAddressSanitizerとValgrindを実行して、早期にメモリの問題を発見する

回避

  • C++で智能ポインタの代わりに生ポインタを使用する - リークとダングリングポインタにつながる
  • ダングリング参照に関するコンパイラの警告を無視する - 実際のバグを示している
  • Rustで安全でないブロックを使用する場合は理由を文書化し、安全なコードから分離する

よくある質問

RAIIとは何ですか?なぜ重要なのですか?
RAII(Resource Acquisition Is Initialization)はオブジェクトの有効期間にリソースの有効期間を紐付けます。オブジェクトがスコープ外に出るとデストラクタが実行され、リソースが解放されます。これにより例外が発生した場合でもリークを防ぎ、クリーンアップが確実に行われます。
Rustはどのようにメモリバグを防ぐのですか?
Rustは各値が正確に1つの所有者を持つ所有権システムを使用します。所有者がスコープ外に出ると、値がドロップされます。borrow checker はこれらのルールをコンパイル時に強制し、use-after-free、double-free、データ競合を防ぎます。
C++では智能ポインタはいつ使用するべきですか?
単一所有権にはunique_ptrを使用してください。複数のコードが同じオブジェクトを所有する必要がある場合はshared_ptrを使用してください。shared_ptrグラフ内のサイクルを解除するにはweak_ptrを使用してください。Cコードとのインターフェースを除き、生ポインタは避けてください。
Cのgoto-cleanupパターンとは何ですか?
すべてのリソース割り当てを最初に実行し、単一のクリーンuplabel で逆順ですべてを解放するパターンです。これにより、関数のどの時点でエラーが発生してもリソースがリークされず解放されることが保証されます。
メモリ安全性についてRustとC++のどちらを選択すればよいですか?
Rustは所有権と借用を通じてより強力なコンパイル時の保証を提供します。C++はより多くの-disciplineを与えますが必要に応じてより多くのコントロールを提供します。メモリ安全性が重要な新規プロジェクトにはRustを使用してください。既存のC++コードベースとのインターフェースや最大パフォーマンスが必要な場合はC++を使用してください。
メモリの問題を発見するのに役立つデバッグツールは何ですか?
AddressSanitizer(ASan)はuse-after-free、リーク、バッファオーバーフローを検出します。ValgrindはC/C++のメモリエラーを検出します。Rust Miriは未定義動作を検出します。ThreadSanitizerはデータ競合を見つけます。開発時とCIパイプラインでこれらのツールを使用してください。

開発者の詳細

ファイル構成