خطأ وقت التشغيل:انتهاك وصول عند استخدام .push_back() مع std::ناقل?
سؤال
لدي ناقلات, تعريف std::vector<LPDIRECT3DTEXTURE9> textures;
في وقت لاحق, أنا تمرير LPDIRECT3DTEXTURE9
الاعتراض على مثل ذلك textures.push_back(texture);
هنا عينة من هذا:
void SpriteManager::AddSprite(float x, float y, float z, LPDIRECT3DTEXTURE9 texture)
{
//snip
textures.push_back(texture);
//snip
}
هذا يسبب خطأ في وقت التشغيل.هو كسر في ناقلات فئة في size()
وظيفة.لماذا قد يحدث هذا ؟
تحرير:
أنا أيضا واجهت متطابقة مشكلة أداء نفس العملية على ناقلات D3DXVECTOR3
الكائنات.منذ LPDIRECT3DTEXTURE9
هو مؤشر إلى IDIRECT3DTEXTURE9
, يجب أن يكون استخدام هذا بدلا من ذلك ؟
المحلول
حتى الآن السبب الأكثر شيوعا هو أن لا يكون متجه.في هذه الحالة ، textures
يبدو أن عضو SpriteManager
فئة.لذلك, أقترح أن كنت في الواقع لم يكن لديك SpriteManager
كائن سواء.هو this
مؤشر صالحة ؟
نصائح أخرى
حسنا, منذ LPDIRECT3DTEXTURE9 قبل المجرية اسم هو مؤشر وليس كائن (كما أشير إلى ذلك) ، تخميني هو أن يتم تمرير جميع أنحاء صالح المؤشرات التي لدينا فاندانغو على الفقراء ناقلات كائن قبل الاتصال push_back().
قد أكون مخطئا ولكن هذا هو قدر ما يمكن أن يقال من المعلومات التي تقدمها.و نعم push_back() ينبغي أن تكون قادرة على تفشل إذا كنت من الذاكرة أو محاولة استخدام غير copyable أو عدم احالة الكائن في ناقلات, ومن ثم لا طريق إلى انتهاك حقوق الوصول.
ناقلات الخاص بك معطوب.أقترح وضع البيانات watchpoint على الداخلية أن نرى ما هو الدوس على ذلك (في المصحح).