C6278

تحذير C6278: <متغير> هو المخصصة باستخدام صفيفة [] جديدة، ولكن يحذف بواسطة يحذف القيم المفردة. سوف لا يتم استدعاء destructors

تظهر فقط في التعليمة البرمجية C + + هذا التحذير ويشير إلى أن استدعاء دالة على inconsistently تخصيص ذاكرة مع صفيفة عامل [] جديدة ، ولكن تحرير فإنه مع العامل يحذف القيم المفردة . هذا هو سلوك غير معرّف طبقاً إلى قياسي C + + والتطبيق + Microsoft Office 2010 Suite VC +. هناك أسباب ثلاثة على الأقل على الأرجح أن يسبب مشاكل:

  • المنشئات لكائنات فردية في صفيفة يتم استدعاء، ولكن لم يتم استدعاء destructors.

  • إذا العمومية أو الخاصة بالفئة، يتم غير متوافق مع [] جديدة operaإلىr و يحذف operaإلىr [ operaإلىr جديد و يحذف operaإلىr ، ونتائج غير متوقعة من المحتمل أن إلى تحدث.

  • هو دائماً rهوky جداً للاعتماد تشغيل غير معرّفة السلوك.

يصعب المبالغة الدقيق لهذا عيب إلى التنبؤ. فقد يؤدي تسرب للفئات ذات destructors تنفيذ de-تخصيص ذاكرة; سلوك غير متناسقة للفئات ذات destructors التي تقوم بإجراء بعض العمليات الهامة دلالياً؛ أو فساد ذاكرة و تعطل عندما يتم تجاوز عوامل تشغيل. وفي حالات غير ذلك قد يكون عدم التطابق unimportant، استناداً إلى تطبيق المحول البرمجي والمكتبات الخاصة به. دائماً لا يميز أداة التحليل بين هذه الحالات.

إذا كانت ذاكرة هو تخصيصها باستخدام صفيفة جديد [ ، يجب أن يكون عادة يتم تحرير مع صفيفة يحذف [ .

مثال

نموذج تعليمات برمجية التالي بإنشاء هذا تحذير:

class A
{
  // members
};

void f( )
{
  A *pA = new A[5];
  // code ...
  delete pA;
}

إلى تصحيح هذا التحذير، استخدم نموذج تعليمات برمجية التالي:

void f( )
{
  A *pA = new A[5];
  // code ...
  delete[] pA;
}

إذا كان المصدر الكائن في الصفيف هو نوع مجموعة أساسية مثل int، float، enum، أو مؤشر، هناك destructors لا يوجد استدعاء. في هذه حالات تحذير C6283هو الإبلاغ عن بدلاً من ذلك.