أمثلة للعالم الحقيقي على بوينتر أريثميت وهباته في جيم وجيم ++
Table of Contents
إن تصويب النقاط هو سمة مشتركة في C و C++، مما يتيح التلاعب المباشر بالعناوين التذكارية، وفي حين أن الاستخدام القوي وغير السليم يمكن أن يؤدي إلى البقايا، وإلى أوجه الضعف الأمني، وإلى السلوك غير المحدد، فإن هذه المادة تعرض أمثلة للعالم الحقيقي توضح تطبيقات ومجازفات مقياس النقاط.
المقتطف 1: تعقب الأشعة
وكثيرا ما يستخدم مقياس النقاط في التكرار من خلال صفائف بكفاءة، مثلا لموجز عناصر صفيفة من أجهزة التبريد:
[الاستعمال التصويب:]
المبلغ = صفر؛
م = صفيفة؛
(للمادة 1 = صفر؛ i < size; i++) {
المبلغ + * (الخيار + طاء)؛
{}
وتستفيد هذه الطريقة بشكل صحيح من عناصر الصفائف باستخدام معياري مرشد.
الرصيف 1: نقطة أريثمية أبعد من أرراي باوند
إن نقل المؤشرات إلى ما وراء الذاكرة المخصصة يمكن أن يسبب سلوكا غير محدد، على سبيل المثال:
م = صفيفة؛
(للمادة 1 = صفر؛ i <= size؛ i+) {
طابعة (%dn) *(ptr + i))؛
{}
الوصول إلى * (الدرجة + الحجم) يتجاوز حدود الصفائف، مما يؤدي إلى نتائج لا يمكن التنبؤ بها.
المثال 2: التلاعب في القوة
وكثيرا ما يستخدم الحساب المرشد في تجهيز الخيوط، مثلا، نسخ الخيوط:
]]]]]نهج مُشفَق:]
"شار" "سـار" = "مرحباً"
char dest[6];
char *p = src;
char *q = dest;
{بينما (*ع) }
*q++ = *p++++
{}
*م = '
الركن 2: السطو في سترينج
وعدم تخصيص حيز للمبيد الباطل أو النسخ خارج العازل يسبب تدفقاً احتياطياً زائداً، على سبيل المثال:
char dest[5];
char *p = "World"
(للمادة 1 = صفر؛ i <= 5؛ i+) {
dest[i] = p[i];
{}
هذه نسخ ستة شخصيات في حاجز 5 مفاعلات، مما تسبب في تدفق زائد.
خاتمة
ويوفر معيار النقاط المرجعية مرونة في جيم وجيم ++، ولكنه يتطلب معالجة دقيقة لتجنب الأخطاء، ويساعد فهم الثغرات المشتركة على منع الحشرات والمسائل الأمنية في تطوير البرامجيات.