缓冲区已使用,但可能尚未初始化(在 Visual Studio 中)

Buffer is used, but may not have been initialized (in visual studio)

本文关键字:初始化 Visual Studio 缓冲区      更新时间:2023-10-16

这是我c++代码的一个片段:

char buff[512];
memset(buff, ' ', sizeof(buff));
GetModuleFileName(NULL, buff, _MAX_PATH);
char *file = strrchr(buff, '.');

似乎buff在第一行初始化。但是我从视觉工作室得到这个(这是一个警告,而不是错误,我想删除这个警告(:

'buff' is not initialized 
'buff' is used, but may not have been initialized

怎么了?

看起来您正在使用纯char*指针进行如下buff

char* buff; 

而不是

char buff[_MAX_PATH];

memset()不会为缓冲区指针分配任何内存。


或者,您也可以使用初始化的指针:

char* buff = new[_MAX_PATH];

但不要忘记打电话

delete [] buff;

然后,该sizeof()不会为您提供分配数组的大小,而只会提供指针变量本身的大小。

更好的选择是改用std::vector<char>

std::vector<char> buff(_MAX_PATH,'');

不过,您需要更改更多代码才能正确使用它:

GetModuleFileName(NULL, buff.data(), _MAX_PATH);
char *file = strrchr(buff.data(), '.');

此外,您应该使用 NUL 字符而不是空格 (' '( 初始化缓冲区:

memset(buff, '', sizeof(buff));
// ^^