技能 memory-safety-patterns
🛡️

memory-safety-patterns

安全

تنفيذ أنماط أمان الذاكرة

也可從以下取得: wshobson

اكتب كودًا خاليًا من الأعطال وآمنًا باستخدام أنماط أمان الذاكرة المثبتة عبر Rust وC++ وC. يمنع التسريبات والاستخدام بعد التحرير وتجاوز حدود المخزن المؤقت باستخدام RAII ونماذج الملكية والمؤشرات الذكية.

支援: Claude Codex Code(CC)
🥉 72 青銅
1

下載技能 ZIP

2

在 Claude 中上傳

前往 設定 → 功能 → 技能 → 上傳技能

3

開啟並開始使用

測試它

正在使用「memory-safety-patterns」。 كيف أمنع تسريبات الذاكرة عند فتح الملفات في C++؟

預期結果:

Use RAII with a smart file wrapper class or std::fstream. The file automatically closes when the object is destroyed, even if an exception occurs. Example: std::fstream file("data.txt"); - destructor handles cleanup automatically.

正在使用「memory-safety-patterns」。 ما الفرق بين Box وRc وArc في Rust؟

預期結果:

Box<T> for single ownership with heap allocation. Rc<T> for shared ownership (single-threaded) - increments reference count on clone. Arc<T> for atomic shared ownership across threads - thread-safe reference counting.

正在使用「memory-safety-patterns」。 كيف أتعامل مع التحقق من الحدود بأمان؟

預期結果:

In C++, use std::vector::at() which throws std::out_of_range, or std::span for array views. In Rust, indexing with [] panics on out-of-bounds, while .get() returns Option for safe handling. Prefer iterators to avoid manual bounds checking.

安全審計

安全
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
內容
32
社群
100
安全
100
規範符合性

你能建構什麼

برمجة الأنظمة

اكتب أنظمة التشغيل أو برامج التشغيل أو البرامج المدمجة الخالية من ثغرات تلف الذاكرة.

التطبيقات الحرجة للأمان

بناء التطبيقات حيث يكون أمان الذاكرة إلزاميًا: التشفير وخدمات الشبكة ومعالجة الملفات.

تحديث الكود القديم

تطبيق أنماط أمان الذاكرة عند إعادة هيكلة قواعد كود C/C++ لتقليل الأخطاء وتحسين الموثوقية.

試試這些提示

تنفيذ RAII الأساسي
أرني كيفية تنفيذ نمط RAII في C++ لفئة مقبض الملف. يتضمن ذلك دلالات النسخ/النقل المناسبة والتأكد من إغلاق الملف تلقائيًا عندما يخرج الكائن من النطاق.
مثال ملكية Rust
اشرح كيف تمنع ملكية Rust أخطاء الاستخدام بعد التحرير. أظهر مثالًا مع هيكل يحتوي على مرجع بما في ذلك تعريفات العمر ومتى تستخدم Box وRc وArc.
إدارة الموارد في C
اكتب دالة C تفتح ملفًا وتخصص ذاكرة وتعالج البيانات. استخدم نمط goto-cleanup للتأكد من تحرير جميع الموارد في حالة الخطأ.
عداد آمن للخيوط
نفذ عدادًا آمنًا للخيوط في C++ باستخدام الذرات وmutex وفي Rust باستخدام Arc وMutex. أظهر كيف يمنع كل لغة سباقات البيانات.

最佳實務

  • تفضل RAII والمؤشرات الذكية على الإدارة اليدوية للذاكرة لضمان التنظيف التلقائي
  • استخدم مدقق الاستعارة في Rust بدلاً من محاربته - يمنع الأخطاء الحقيقية
  • قم بتشغيل AddressSanitizer وValgrind أثناء التطوير لاكتشاف مشاكل الذاكرة مبكرًا

避免

  • استخدام المؤشرات الأولية في C++ بدلاً من المؤشرات الذكية - يؤدي إلى التسريبات والمؤشرات المعلقة
  • تجاهل تحذيرات المترجم حول المراجع المعلقة - تشير إلى أخطاء حقيقية
  • استخدام كتل unsafe في Rust بدون توثيق لماذا وعزلها عن الكود الآمن

常見問題

ما هو RAII ولماذا يهم؟
يربط RAII (اقتناء الموارد هو التهيئة) عمر الموارد بعمر الكائن. عندما يخرج الكائن من النطاق، يتم تشغيل المُدمِّر وإطلاق الموارد. يمنع هذا التسريبات ويضمن التنظيف حتى عند حدوث استثناءات.
كيف يمنع Rust أخطاء الذاكرة؟
يستخدم نظام ملكية حيث تكون لكل قيمة مالك واحد بالضبط. عندما يخرج المالك من النطاق، يتم إسقاط القيمة. يفرض مدقق الاستعارة هذه القواعد في وقت التجميع، مما يمنع الاستخدام بعد التحرير والحرمان المزدوج وسباقات البيانات.
متى يجب أن أستخدم المؤشرات الذكية في C++؟
استخدم unique_ptr للملكية الفريدة (الاختيار الافتراضي). استخدم shared_ptr عندما تحتاج عدة أجزاء من الكود إلى امتلاك نفس الكائن. استخدم weak_ptr لكسر الدورات في رسوم shared_ptr. تجنب المؤشرات الأولية ما لم تكن تتواصل مع كود C.
ما هو نمط goto-cleanup في C؟
نمط حيث تحدث جميع تخصيصات الموارد في البداية، وتحرر ملصقة واحدة كل شيء بترتيب عكسي. يضمن هذا تحرير الموارد حتى عند حدوث أخطاء في أي نقطة في الدالة، مما避免了 التسريبات.
كيف أختار بين Rust وC++ لأمان الذاكرة؟
يوفر Rust ضمانات أقوى في وقت التجميع من خلال الملكية والاستعارة. يتطلب C++ مزيدًا من الانضباط لكنه يعطي مزيدًا من التحكم. اختر Rust للمشاريع الجديدة حيث يكون أمان الذاكرة أمرًا بالغ الأهمية. استخدم C++ عند التواصل مع قواعد كود C++ الموجودة أو عندما تكون أقصى أداء مطلوبًا.
ما هي أدوات التصحيح التي تساعد في اكتشاف مشاكل الذاكرة؟
يلتقط AddressSanitizer (ASan) الاستخدام بعد التحرير والتسريبات وتجاوز حدود المخزن المؤقت. يكتشف Valgrind أخطاء الذاكرة في C/C++. يكتشف Rust Miri السلوك غير المحدد. يجد ThreadSanitizer سباقات البيانات. استخدم هذه الأدوات أثناء التطوير وفي خطوط CI.