Compartilhar via


C6384

Aviso C6384: sizeof um ponteiro de divisão por outro valor

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

Se o ponteiro é um parâmetro de função e o tamanho do buffer não foi aprovado, não é possível calcular o máximo de buffer disponível. Quando o ponteiro é alocado localmente, o tamanho 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 tamanho do buffer, conforme mostrado no 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 o _tcsncpy_s de função de cadeia de caracteres seguras, 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 Operator