使用 Rust、C++ 和 C 中经过验证的内存安全模式编写无崩溃的安全代码。通过 RAII、所有权模型和智能指针防止内存泄漏、悬垂引用和缓冲区溢出。
下载技能 ZIP
在 Claude 中上传
前往 设置 → 功能 → 技能 → 上传技能
开启并开始使用
测试它
正在使用“memory-safety-patterns”。 如何在 C++ 中打开文件时防止内存泄漏?
预期结果:
使用 RAII 与智能文件包装类或 std::fstream。文件会在对象销毁时自动关闭,即使发生异常也是如此。示例:std::fstream file("data.txt"); - 析构函数会自动处理清理。
正在使用“memory-safety-patterns”。 Rust 中 Box、Rc 和 Arc 有什么区别?
预期结果:
Box<T> 用于带堆分配的单所有权。Rc<T> 用于共享所有权(单线程)- 克隆时递增引用计数。Arc<T> 用于跨线程的原子共享所有权 - 线程安全的引用计数。
正在使用“memory-safety-patterns”。 如何安全地处理边界检查?
预期结果:
在 C++ 中,使用 std::vector::at() 会抛出 std::out_of_range,或使用 std::span 进行数组视图。在 Rust 中,使用 [] 索引在越界时会 panic,而 .get() 返回 Option 以安全处理。优先使用迭代器以避免手动边界检查。
安全审计
安全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.
质量评分
你能构建什么
系统编程
编写不存在内存损坏漏洞的操作系统、驱动程序或嵌入式软件。
安全关键应用
构建内存安全至关重要的应用:密码学、网络服务、文件处理。
遗留代码现代化
在重构 C/C++ 代码库时应用内存安全模式,减少错误并提高可靠性。
试试这些提示
展示如何在 C++ 中为文件句柄类实现 RAII 模式。包含正确的复制/移动语义,并确保文件在对象超出作用域时自动关闭。
解释 Rust 所有权如何防止悬垂引用错误。展示一个包含引用的结构体示例,包括生命周期注解以及何时使用 Box、Rc 和 Arc。
编写一个 C 函数来打开文件、分配内存并处理数据。使用 goto-cleanup 模式确保在出错时所有资源都被正确释放。
在 C++ 中使用原子操作和互斥锁实现线程安全计数器,在 Rust 中使用 Arc 和 Mutex 实现。展示每种语言如何防止数据竞争。
最佳实践
- 优先使用 RAII 和智能指针而非手动内存管理,以确保自动清理
- 使用 Rust 中的借用检查器而不是与它对抗 - 它能防止真正的错误
- 在开发过程中运行 AddressSanitizer 和 Valgrind 以尽早捕获内存问题
避免
- 在 C++ 中使用原始指针而非智能指针 - 导致泄漏和悬垂指针
- 忽略关于悬垂引用的编译器警告 - 它们指示真正的错误
- 在 Rust 中使用 unsafe 块而未说明原因并将它们与安全代码隔离