لماذا يتعطل QMap، عند استدعاء يحتوي على () في وظيفة findNode؟

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

  •  21-12-2019
  •  | 
  •  

سؤال

لدي برنامج متعدد الخيوط يستخدم QMap لتخزين بعض البيانات، ولكنه يتعطل بين الحين والآخر، في نفس السطر، عندما يتم استدعاء وظيفة يحتوي على ():

myMap.contains(a) -> المفاتيح والقيم ليست مؤشرات.

يتحطم:

#0 findNode (akey=<synthetic pointer>, this=0x120eec4c) at /var/build/workspace/stage/nto/usr/include/qt4/QtCore/qmap.h:486 #1 contains (akey=<synthetic pointer>, this=0x120eec4c) at /var/build/workspace/stage/nto/usr/include/qt4/QtCore/qmap.h:555

الخط الذي يتعطل هو ببساطة هذا السطر:

for (int i = d->topLevel; i >= 0; i--)

أعتقد أن الشيء الوحيد الذي يمكن أن يسبب الانهيار هو هذا المؤشر d يتم حذفه بطريقة أو بأخرى.هل لديك أي فكرة عن سبب تعطله، أو كيف يجب علي المضي قدمًا في تصحيح الأخطاء؟

شكرًا

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

المحلول

أنت تقوم بالوصول إلى مثيل الخريطة من عدة سلاسل رسائل دون إجراء تسلسل للوصول.لا يمكنك فعل ذلك.يجب عليك إما:

  1. احصل على نسخة من الخريطة في كل موضوع، أو

  2. تسلسل الوصول إلى الخريطة باستخدام كائن المزامنة (mutex).

نظرًا لأن حاويات Qt تتم مشاركتها ضمنيًا، فإن نسخ الخريطة يعد رخيصًا إلى حد ما.يجب أن تكون النسخة في الموضوع المالك، ومن ثم يمكن استخدام النسخة في أي موضوع آخر.سيتم فصل المثيل المنسوخ بأمان إذا لزم الأمر.

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