C6384
경고 C6384: 포인터의 크기를 다른 값으로 나눕니다.
이 경고는 크기 계산이 잘못되었을 가능성이 있음을 나타냅니다.배열의 요소 수를 계산할 때 배열의 크기를 첫 번째 요소의 크기로 나누는 경우가 있습니다. 하지만 배열이 실제로는 포인터인 경우 의도하지 않은 결과가 나타납니다.
포인터가 함수 매개 변수이고 버퍼의 크기가 전달되지 않은 경우에는 사용 가능한 최대 버퍼를 계산할 수 없습니다.포인터가 로컬로 할당되는 경우 할당에 사용된 크기를 사용해야 합니다.
예제
다음 코드에서는 이 경고를 발생시킵니다.
#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);
}
}