C6384

تحذير C6384: قسمة sizeof مؤشر القيمة أخرى

وهذا تحذير يشير إلى أن عملية حسابية الحجم قد يكون غير صحيح. لحساب عدد العناصر في صفيفة، واحد يقسم على أحياناً الحجم الصفيفة بالحجم العنصر أول؛ ومع ذلك، عندما الصفيفة هو مؤشر فعلياً، تكون النتيجة هو عادة مختلف عن intended.

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

مثال

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

#include <windows.h>
#include <TCHAR.h>

#define SIZE 15

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
    _tcsncpy(dest, src, sizeof dest  / sizeof dest[0]); 
  }
}

لتصحيح هذا التحذير، قم بتمرير الحجم احتياطي كما هو موضح في التالية تعليمات برمجية:

#include <windows.h>
#include <TCHAR.h>

#define SIZE 15

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
    _tcsncpy(dest, src, SIZE);
  }
}

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

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
   _tcsncpy_s(dest, SIZE, src, SIZE);
  }
} 

راجع أيضًا:

المرجع

_mbsnbcpy_s _mbsnbcpy_s_l

sizeof Operator