Предупреждение 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);
}
}
Использование new
и delete
имеет множество ошибок с точки зрения утечки памяти и исключений. Чтобы избежать таких потенциальных утечек, используйте механизмы, предоставляемые стандартной библиотекой C++ (STL). К ним относятся, например, unique_ptr
и контейнеры, такие как.shared_ptr
vector
Дополнительные сведения см. в разделе "Смарт-указатели " и "Стандартная библиотека C++".
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по