Unicorn with delicious cookie
Nous utilisons des cookies pour améliorer votre expérience de navigation. En savoir plus
Accepter
to the top
>
>
>
Examples of errors detected by the V511…

Examples of errors detected by the V511 diagnostic

V511. The sizeof() operator returns pointer size instead of array size.


Shareaza

V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof ( arrChar )' expression. BugTrap encoding.cpp 477


#define countof(array) (sizeof(array) / sizeof((array)[0]))

size_t AnsiDecodeChar(const BYTE* pBytes,
  size_t nNumBytes, TCHAR arrChar[2],
  size_t& nCharSize)
{
  ....
    nCharSize = MultiByteToWideChar(CP_ACP, 0,
      (const CHAR*)pBytes, nNumBytesInChar,
      arrChar, countof(arrChar));
  ....
}

The B object is simply a pointer. Value 2 in the square brackets indicates to the programmer that he is working with an array of 2 items. But it is not an array of items which is passed into the function - it is only the pointer. So, the sizeof(arrChar) expression will return value 4 or 8 (the size of the pointer in a 32-bit/64-bit system).


Wolfenstein 3D

V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof (src)' expression. Splines math_matrix.h 94


ID_INLINE mat3_t::mat3_t( float src[ 3 ][ 3 ] ) {
  memcpy( mat, src, sizeof( src ) );
}

The 'src' object is simply a pointer. Value 3x3 in the square brackets indicates to the programmer that he is working with an array of 3x3 items. But it is not an array of items which is passed into the function - it is only the pointer. So, the sizeof(src) expression will return value 4 or 8 (the size of the pointer in a 32-bit/64-bit system).


Wolfenstein 3D

V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof (result)' expression. cgame bg_animation.c 807


void BG_ParseConditionBits(
  char **text_pp, animStringItem_t *stringTable,
  int condIndex, int result[2] )
{
  ....
  memset( result, 0, sizeof( result ) );
  ....
}

The 'result' object is simply a pointer. Value 2 in the square brackets indicates to the programmer that he is working with an array of 2 items. But it is not an array of items which is passed into the function - it is only the pointer. So, the sizeof(result) expression will return value 4 or 8 (the size of the pointer in a 32-bit/64-bit system).


Chromium

V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof (salt)' expression. browser visitedlink_master.cc 968


uint8 salt_[LINK_SALT_LENGTH];

VisitedLinkMaster::TableBuilder::TableBuilder(
    VisitedLinkMaster* master,
    const uint8 salt[LINK_SALT_LENGTH])
    : master_(master),
      success_(true) {
  fingerprints_.reserve(4096);
  memcpy(salt_, salt, sizeof(salt));
}

The 'salt' object is simply a pointer. Value LINK_SALT_LENGTH in the square brackets indicates to the programmer that he is working with an array of LINK_SALT_LENGTH items. But it is not an array of items which is passed into the function - it is only the pointer. So, the sizeof(salt) expression will return value 4 or 8 (the size of the pointer in a 32-bit/64-bit system).

Similar errors can be found in some other places:

  • V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof (salt)' expression. common visitedlink_common.cc 84

MySQL

V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof (buf)' expression. auth_win_client common.cc 489


typedef char Error_message_buf[1024];

const char* get_last_error_message(Error_message_buf buf)
{
  int error= GetLastError();

  buf[0]= '\0';
  FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
  NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
  (LPTSTR)buf, sizeof(buf), NULL );

  return buf;
}

The 'buf' object is simply a pointer. So, the sizeof(buf) expression will return value 4 or 8 (the size of the pointer in a 32-bit/64-bit system).


Intel AMT SDK

V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof (pid)' expression. PskGenerator pskgenerator.cpp 126


typedef char PID[pid_len+1];
typedef char PPS[pps_len+1];

static void generate(PID pid, PPS pps)
{
  memset(pid,0,sizeof(pid));
  memset(pps,0,sizeof(pps));
  ....
}

The 'pid/pps' object is simply a pointer. Value pid_len+1 / pps_len+1 in the square brackets indicates to the programmer that he is working with an array of N items. But it is not an array of items which is passed into the function - it is only the pointer. So, the sizeof(pid) / sizeof(pps) expression will return value 4 or 8 (the size of the pointer in a 32-bit/64-bit system).

Similar errors can be found in some other places:

  • V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof (pps)' expression. PskGenerator pskgenerator.cpp 127

ReactOS

V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof (dest)' expression. glu32 mapdesc.cc 95


void
Mapdesc::identify( REAL dest[MAXCOORDS][MAXCOORDS] )
{
  memset( dest, 0, sizeof( dest ) );
  for( int i=0; i != hcoords; i++ )
    dest[i][i] = 1.0;
}

The 'dest' object is simply a pointer. Value [MAXCOORDS][MAXCOORDS] in the square brackets indicates to the programmer that he is working with an array of MAXCOORDS x MAXCOORDS items. But it is not an array of items which is passed into the function - it is only the pointer. So, the sizeof(dest) expression will return value 4 or 8 (the size of the pointer in a 32-bit/64-bit system). This is what should have been written here: Mapdesc::identify( REAL (&dest)[MAXCOORDS][MAXCOORDS] )


Samba

V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof ((domain))' expression. wbinfo.c 124


#define FSTRING_LEN 256
typedef char fstring[FSTRING_LEN];

char *safe_strcpy(char *dest,const char *src, size_t maxlength)
#define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1)

static bool parse_wbinfo_domain_user(
  const char *domuser, fstring domain, fstring user)
{
  ....
    /* Maybe it was a UPN? */
    if ((p = strchr(domuser, '@')) != NULL) {
      fstrcpy(domain, "");
      fstrcpy(user, domuser);
      return true;
    }
  ....
}

Similar errors can be found in some other places:

  • V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof ((user))' expression. wbinfo.c 125
  • V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof ((user))' expression. wbinfo.c 129
  • V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof ((domain))' expression. wbinfo.c 130
  • And 22 additional diagnostic messages.

Source Engine SDK

V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof (iNeighbors)' expression. Vrad_dll disp_vrad.cpp 60


#define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0]))
#define _ARRAYSIZE(A)   RTL_NUMBER_OF_V1(A)

int GetAllNeighbors( const CCoreDispInfo *pDisp,
                     int iNeighbors[512] )
{
  ....
  if ( nNeighbors < _ARRAYSIZE( iNeighbors ) )
    iNeighbors[nNeighbors++] = pCorner->m_Neighbors[i];
  ....
}

Oracle VM Virtual Box

V511 The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof (plane)' expression. devvga-svga3d-win.cpp 4650


int vmsvga3dSetClipPlane(...., float plane[4]) // <=
{
  ....
  /* Store for vm state save/restore. */
  pContext->state.aClipPlane[index].fValid = true;
  memcpy(pContext->state.aClipPlane[....], plane, sizeof(plane));
  ....
}

close form

Remplissez le formulaire ci‑dessous en 2 étapes simples :

Vos coordonnées :

Étape 1
Félicitations ! Voici votre code promo !

Type de licence souhaité :

Étape 2
Team license
Enterprise licence
** En cliquant sur ce bouton, vous déclarez accepter notre politique de confidentialité
close form
Demandez des tarifs
Nouvelle licence
Renouvellement de licence
--Sélectionnez la devise--
USD
EUR
* En cliquant sur ce bouton, vous déclarez accepter notre politique de confidentialité

close form
La licence PVS‑Studio gratuit pour les spécialistes Microsoft MVP
close form
Pour obtenir la licence de votre projet open source, s’il vous plait rempliez ce formulaire
* En cliquant sur ce bouton, vous déclarez accepter notre politique de confidentialité

close form
I want to join the test
* En cliquant sur ce bouton, vous déclarez accepter notre politique de confidentialité

close form
check circle
Votre message a été envoyé.

Nous vous répondrons à


Si l'e-mail n'apparaît pas dans votre boîte de réception, recherchez-le dans l'un des dossiers suivants:

  • Promotion
  • Notifications
  • Spam