Compartilhar via


C6384

Aviso C6384: dividindo um ponteiro sizeof por outro valor

Este aviso indica que um cálculo de dimensionar pode estar incorreto.Para calcular o número de elementos em uma matriz, um às vezes, divide o dimensionar da matriz pelo dimensionar do primeiro elemento; no entanto, quando a matriz é realmente um ponteiro, o resultado é normalmente diferente da pretendida.

Se o ponteiro é um parâmetro de função e o dimensionar do buffer não foi passado, não é possível calcular o buffer máximo disponível.Quando o ponteiro é alocado localmente, o dimensionar usado na alocação deve ser usado.

Exemplo

O código a seguir gera este aviso:

#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]); 
  }
}

Para corrigir esse aviso, passe o dimensionar do buffer sistema autônomo mostra o código a seguir:

#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);
  }
}

Para corrigir esse aviso usando a seqüência segura função _tcsncpy_s, use o seguinte código:

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

Consulte também

Referência

_mbsnbcpy_s, _mbsnbcpy_s_l

sizeof Operador