VC ++ 6.0 تصادم انتهاك الوصول إلى المتجهات. علة معروفة؟
سؤال
أحاول استخدام std :: vector <> :: const_iterator وأحصل على تحطم "انتهاك الوصول". يبدو أن رمز ناقل STD :: ينهار عندما يستخدم الداخلية الخاصة به First_
و Last_
مؤشرات. من المفترض أن هذا خطأ معروف. آمل أن يتمكن شخص ما من توجيهني إلى الحل الصحيح. من المحتمل أن تسمى الوظيفة المتعطل من مكتبة خارجية؟
const Thing const* AClass::findThing (const std::string& label) const
{
//ThingList_.begin() blows up at run time. Compiles fine.
for (std::vector<Thing*>::const_iterator it = ThingList_.begin(); it != ThingList_.end(); ++it) {
//Irrelevant.
}
return 0;
}
ببساطة الاتصال ThingList_.size()
أيضا تعطل.
هذا هو SP6 ، إذا كان يهم.
المحلول
إذا كنت تمرر كائنات C ++ عبر حدود المكتبة الخارجية ، فيجب عليك التأكد من أن جميع المكتبات تستخدم نفس مكتبة وقت التشغيل (على وجه الخصوص ، نفس تخصيص الكومة). في الممارسة العملية ، هذا يعني أنه يجب ربط جميع المكتبات بإصدار DLL من MSVCRT.
نصائح أخرى
من شبه المؤكد أنه خطأ في الكود الخاص بك وليس std :: ناقلات. يتم استخدام هذا الرمز بالطريقة التي يتمتع بها الكثير من المشاريع بحيث يكون لها مثل هذا الخلل السهل في إعادة التخزين.
ما يحدث على الأرجح هو أن متغير thniglist_ قد تالفة بطريقة ما. هل تم الوصول إلى الصفيف الأساسي مباشرة و/أو تعديل؟
وأنا أتفق مع جاريد على أنه على الأرجح في الكود الخاص بك ، وليس أقل ، يجب أن تكون متأكدًا من أن LIBS STL محدثة.
ال Dinkumware يحتوي الموقع على الملفات المصححة التي تحتاجها.
يجب أن تحديث فقط لتكون آمنًا