سؤال

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

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

المحلول

في أي مكان في مُنشئ النسخ ، يمكنك تعيين numcols ، numrows.

نصائح أخرى

ليس الإجابة على مشكلة التحطم (التي تم الاعتناء بها بالفعل على أي حال) ، ولكن تجدر الإشارة إلى أن مشغل المهمة الخاص بك يضيع بلا داع كما هو مكتوب حاليًا:

matrix matrix::operator =(const matrix right)

المشكلة الأولى هي أنها تأخذ المعلمة حسب القيمة. هذا بالطبع يعني أنه عندما مثل مهمة مثل A = B يحدث ، ثم نسخة من B مصنوع واستخدامه في right معلمة الوظيفة. ولكن في الكود الحالي ، سيكون الغرض الوحيد من النسخ هو تعيين قيم A ثم يتم تدميرها. يمكنك فقط تمرير أ const matrix& لتجنب النسخة. (بدلاً من ذلك ، يمكنك ترك المعلمة كنسخة ذات قيمة ، ولكنها تنفذ المشغل بأكمله كملف نسخ و swap.)

القضية الثانية هي أن هذا يعود matrix. قد يؤدي هذا أيضًا إلى إنشاء نسخة مؤقتة لا داعي لها. وعلى الرغم من أن المترجم قد يكون قادرًا على تحسين النسخة ، فلا يوجد غرض للعودة إلى نسخة قيمة على الإطلاق. يعيد النموذج القياسي لمشغل الواجب إشارة إلى الكائن الذي تم تعيينه إليه. لذلك يجب عليك المضي قدمًا وجعل هذا النوع A الإرجاع matrix&

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