طفح عدد صحيح[بحاجة لمصدر] يحدث عندما تزيد القيمة المراد تخزينها عن المجال المتاح لنوع التخزين، بمعنى أن الذاكرة المتاحة لا تكفي تمثيل القيمة.

طفح لعداد سيارة يبين أحد أشكال الطفح الميكانيكي. عندما تكون كل الأرقام أقصى قيمة (9) ويتم إضافة واحد تؤدي سلسلة الجمع ونقل الباقي إلى تغيير جميع الأرقام إلى صفر. ولكن بسبب عدم وجود رقم أقصى اليسار يمكنه حمل القيمة الجديدة يتم فقدان الواحد ويبدأ العد من الصفر

بالنسبة للأعداد الموجبة وكذلك السالبة في الأنظمة المتممة ثنائيا يؤدي الطفح إلى الرجوع لأصغر قيمة ممكنة، فمثلا نوع uint32_t حجمه 32 بت. في هذه الحالة سيعود إلى الصفر عند محاولة تخزين رقم 4294967296 (2 مرفوعة لأس 32) .

توفر المعالجات في العادة إمكانية الكشف عن حدوث طفح. مثلا عائلة x86 توفر OF ‏ (Overflow Bit) يمكن التأكد من قيمتها لضمان عدم حدوث طفح.

التعامل مع الطفح

التعامل مع الطفح من قبل بعض اللغات البرمجية
اللغة عدد صحيح دون إشارة عدد صحيح ذو إشارة
سي باقي قسمة العدد على سعة النوع سلوك غير معرف
سي++ باقي قسمة العدد على سعة النوع سلوك غير معرف
سي شارب System.OverflowException يتم إطلاقها إذا كان الكود بداخل checked {}[1]
جافا النوع غير موجود يتم العودة إلى أصغر قيمة ممكنة للنوع
بايثون النوع غير موجود يتم التحويل إلى نوع أكبر
بي إتش بي النوع غير موجود يتم التحويل إلى عدد ذو فاصلة عائمة

في حالة أن لغة البرمجة لا تقوم بمراقبة سير العمليات الحسابية، يجب على المبرمج القيام بالاحتياطات اللازمة لمنع الطفح عند إجراء العمليات الحسابية، وذلك بالتأكد قبل العملية من أن نائج العملية وأي نتائج وسيطة ستكون داخل المجال المسموح. في لغة السي، يجب تولية عناية خاصة للطفح لأن طفح عدد صحيح ذو إشارة في السي يؤدي إلى سلوك غير معرف. لهذا السبب تقوم الكثير من معالجات السي باعتبار الطفح غير ممكن الحدوث، وتقوم با الاستمثال على ذلك الأساس وربما يؤدي ذلك إلى نتائج خاطئة وأحيانا كارثية.

في اللغات التي لا تشترط تحديد نوع معين للمتغير، يتم عادة تحويل المتغير إلى نوع عدد صحيح جديد لمنع الطفح. من الأمثلة على ذلك بايثون وروبي بينما تقوم لغات مثل PHP بالتحويل إلى نوع فاصلة عائمة.

في حالة حدوث طفح لم يتم التعامل معه ربما يتغير سير البرنامج. يتمكن المستخدم جراء ذلك من التأثير على عمل البرنامج بطرق لم يخطط لها المبرمج وهو مايؤدي إلى ثغرات أمنية.

مراجع