خطأ وقت التشغيل:انتهاك وصول عند استخدام .push_back() مع std::ناقل?

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

  •  05-07-2019
  •  | 
  •  

سؤال

لدي ناقلات, تعريف 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 على الداخلية أن نرى ما هو الدوس على ذلك (في المصحح).

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