경고 C6384
포인터의 크기를 다른 값으로 나누기
이 경고는 크기 계산이 잘못되었을 수 있음을 나타냅니다. 배열의 요소 수를 계산하기 위해 배열의 크기를 첫 번째 요소의 크기로 나누는 경우가 있습니다. 그러나 배열이 실제로 포인터인 경우 결과는 일반적으로 의도한 것과 다릅니다.
설명
포인터가 함수 매개 변수이고 버퍼의 크기가 전달되지 않은 경우 사용 가능한 최대 버퍼를 계산할 수 없습니다. 포인터가 로컬로 할당되면 할당에 사용되는 크기를 사용해야 합니다.
코드 분석 이름: DIVIDING_SIZEOF_POINTER
예시
다음 코드는 경고 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);
}
}
메모리 누수 및 delete
예외 측면에서 많은 문제를 사용하고 new
있습니다. 이러한 종류의 잠재적 누출을 완전히 방지하려면 C++ STL(표준 라이브러리)에서 제공하는 메커니즘을 사용합니다. 여기에는 < a0/> unique_ptr
및 컨테이너(예: vector
.)가 포함shared_ptr
됩니다. 자세한 내용은 스마트 포인터 및C++ 표준 라이브러리를 참조하세요.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기