技能 memory-safety-patterns
🛡️

memory-safety-patterns

安全

實現記憶體安全模式

也可从以下获取: wshobson

使用 Rust、C++ 和 C 中經過驗證的記憶體安全模式編寫無當機的安全程式碼。透過 RAII、所有權模型和智慧指標防止記憶體洩漏、釋放後使用和緩衝區溢位。

支持: Claude Codex Code(CC)
🥉 75 青铜
1

下载技能 ZIP

2

在 Claude 中上传

前往 设置 → 功能 → 技能 → 上传技能

3

开启并开始使用

测试它

正在使用“memory-safety-patterns”。 How do I prevent memory leaks when opening files in C++?

预期结果:

使用 RAII 搭配智慧檔案包裝類別或 std::fstream。當物件被銷毀時,檔案會自動關閉,即使發生例外也不例外。範例:std::fstream file("data.txt"); - 解構子會自動處理清理。

正在使用“memory-safety-patterns”。 What is the difference between Box, Rc, and Arc in Rust?

预期结果:

Box<T> 用於單一所有權的堆疊配置。Rc<T> 用於共享所有權(單一執行緒)- 在 clone 時遞增參考計數。Arc<T> 用於跨執行緒的原子共享所有權 - 執行緒安全的參考計數。

正在使用“memory-safety-patterns”。 How do I handle bounds checking safely?

预期结果:

在 C++ 中,使用 std::vector::at() 會拋出 std::out_of_range,或使用 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 所有權如何防止釋放後使用錯誤。顯示一個包含參考的結構體範例,包括生命週期註釋以及何時使用 Box、Rc 和 Arc。
C 資源管理
撰寫一個 C 函數,開啟檔案、配置記憶體並處理資料。使用 goto-cleanup 模式確保在發生錯誤時所有資源都被正確釋放。
執行緒安全計數器
分別使用 atomics 和互斥鎖在 C++ 中,以及使用 Arc 和 Mutex 在 Rust 中實作執行緒安全的計數器。顯示每種語言如何防止資料競爭。

最佳实践

  • 優先使用 RAII 和智慧指標而非手動記憶體管理,以確保自動清理
  • 在 Rust 中使用借用檢查器而非對抗它 - 它能防止真實錯誤
  • 在開發期間執行 AddressSanitizer 和 Valgrind 以盡早發現記憶體問題

避免

  • 在 C++ 中使用原始指標而非智慧指標 - 導致記憶體洩漏和懸指標
  • 忽略編譯器關於懸參考的警告 - 它們表示真實錯誤
  • 在 Rust 中使用 unsafe 區塊卻未記錄原因且未與安全程式碼隔離

常见问题

什麼是 RAII?為什麼它很重要?
RAII(資源獲取即初始化)將資源生命週期與物件生命週期綁定。當物件超出範圍時,其解構子會執行並釋放資源。這可以防止洩漏並確保即使發生例外也能進行清理。
Rust 如何防止記憶體錯誤?
Rust 使用所有權系統,其中每個值只有一個擁有者。當擁有者超出範圍時,值會被丟棄。借用檢查器在編譯時強制執行這些規則,防止釋放後使用、雙重釋放和資料競爭。
何時應該在 C++ 中使用智慧指標?
使用 unique_ptr 進行單一所有權(預設選擇)。當程式碼的多個部分需要擁有同一個物件時使用 shared_ptr。使用 weak_ptr 來打破 shared_ptr 圖中的循環。除非與 C 程式碼介接,否則避免使用原始指標。
什麼是 C 中的 goto-cleanup 模式?
一種模式,其中所有資源分配發生在開頭,單一清理標籤以反向順序釋放所有內容。這確保資源即使在函數中任何點發生錯誤也能被釋放,避免洩漏。
如何在 Rust 和 C++ 之間選擇以確保記憶體安全?
Rust 透過所有權和借用提供更強的編譯時保證。C++ 需要更多紀律但給予更多控制。對於記憶體安全至關重要的新專案,選擇 Rust。在需要與現有 C++ 程式碼庫介接或需要最高效能時使用 C++。
哪些除錯工具有助於發現記憶體問題?
AddressSanitizer(ASan)可捕捉釋放後使用、洩漏和緩衝區溢位。Valgrind 可偵測 C/C++ 中的記憶體錯誤。Rust Miri 可偵測未定義行為。ThreadSanitizer 可找出資料競爭。在開發和 CI 流程中使用這些工具。