VC ++ 6.0 تصادم انتهاك الوصول إلى المتجهات. علة معروفة؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

أحاول استخدام 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 يحتوي الموقع على الملفات المصححة التي تحتاجها.

يجب أن تحديث فقط لتكون آمنًا

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