أبر-كلوكورك الإنذارات الكاذبة والتخلص من الأخطاء غير صحيحة

StackOverflow https://stackoverflow.com/questions/3253875

  •  16-09-2020
  •  | 
  •  

سؤال

كلوكورك تقارير خطأ من:-

"أبر-تجاوز المخزن المؤقت ، مؤشر مجموعة من 'أويدسب' قد يكون خارج الحدود.صفيف 'أويدسب' من حجم 64 قد تستخدم مؤشر القيمة (القيم) -2..-1."

لهذا الخط:-

if (check_index_lower_legality (len,-1))
{
oidsp[len-1] = specProb;
}

عند التحقق من _أدخال_الشرعية هو:-

bool check_index_lower_legality (int index, int offset)
/**
 * This function checks that the index with the offset isn't 
 * below zero. 
 * If it is - returns 0 ;
 * If isn't - returns 1 ;
 **/
{

if (  (index + offset )<0) {
   return 0;
  }
 return 1 ; 
}

ومع ذلك لا علة عندما check_index_lower_legality هو:- (وهو بالمناسبة إجابة غير صحيحة ، أما بالنسبة لقيم الإزاحة -2 أو -1 سيكون هناك خطأ حقيقي في وقت التشغيل.

bool check_index_lower_legality (int index, int offset)
/**
 * This function checks that the index with the offset isn't 
 * below zero. 
 * If it is - returns 0 ;
 * If isn't - returns 1 ;
 **/
{
 if (index <=0) {
  return 0;
 }
 return 1;
}

أي أفكار?

هل كانت مفيدة؟

المحلول

قد أفتقد شيئا ما ، لكن وظيفتك (تحقق من فهرس_أدنى) لا تعدل متغير 'لين' ، ولا يتم استخدام العائد من الوظيفة للوصول إلى المصفوفة الخاصة بك ، لذلك يبدو أن مقتطفك كما هو منصوص عليه يولد بشكل صحيح تدفق مؤقت لوقت التشغيل (لقيم لين < 0).هل يمكنك التوسع في المثال إذا كنت تعتقد أن التقرير غير صحيح حقا?

شكرا ، جوين.

نصائح أخرى

هذا خطأ كاذب.تحتاج إلى إضافة فحص إضافي لإخبار لين هو > 1 دائما.

حتى تتمكن من تخطي هذا الخطأ عن طريق إضافة حالة غير مرغوب فيها تماما.

if (check_index_lower_legality (len,-1)) 
{
if(len > 1) 
oidsp[len-1] = specProb; 
} 

أو يمكنك وضع علامة على هذا الخطأ كما انذار كاذب وتشغيل كلوكوركس مرة أخرى.ومن المرجح أن يتخطى ذلك في التقرير التالي.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top