C6384

警告 C6384:用另一值除指针的 sizeof 值

此警告意味着大小计算可能有误。为了计算数组中元素的数目,用户有时用第一个元素的大小除数组的大小;但是,当数组实际上是指针时,结果通常与所预期的不同。

如果指针是函数参数,而且未传递缓冲区的大小,则不能计算可用的最大缓冲区。当指针在本地分配时,应当使用在分配时所使用的大小。

示例

下面的代码生成此警告:

#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) 提供的结构。这些包括shared_ptr, unique_ptr, 和 vector有关更多信息,请参见智能指针(现代 C++)C++ 标准库参考

请参见

参考

_mbsnbcpy_s、_mbsnbcpy_s_l

sizeof 运算符