缓冲区已使用,但可能尚未初始化(在 Visual Studio 中)
Buffer is used, but may not have been initialized (in visual studio)
这是我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));
// ^^
相关文章:
- C++ VISUAL STUDIO:GLFWwindow没有初始化,即使它是在文档中编写的并且以前工作过
- Visual Studio C++:不能使用类型为 "const wchar_t *" 的值来初始化类型为 "TCHAR *" 的实体
- 使用函数从 Visual Studio 2017 中的 main 创建和初始化数组
- 缓冲区已使用,但可能尚未初始化(在 Visual Studio 中)
- Visual Studio 2017 允许在构造函数中使用自身初始化引用成员.真的是合法的C++吗?
- Visual Studio,找不到初始化术语,无法再调试
- 如果变量未初始化,Visual Studio 2017 不会生成任何警告
- Visual Studio 2010 是否执行零初始化
- Visual C 新类型初始化
- Visual Studio 编译的程序在尝试减小输出大小后无法正确初始化
- C++ Visual Studio:使用未初始化的局部变量"响应"
- Visual Studio:变量在未初始化的情况下被使用
- 带有变量初始化的visual C++构造函数
- Visual C++ 模板类成员结构初始化语法糖
- MSVC 19.11 / Visual C 2017:尺寸1和size_t类型的初始化列表误解
- 使用visual studio 2012初始化openGL时出现问题
- 如何更改静态链接库中常量字符串数组的Visual Studio C++初始化顺序
- 在Visual Studio 2013中为rvalue引用初始化捕获
- Visual Studio 2013 因非静态数据成员初始化而崩溃
- Visual Studio 2010 SP1 中的 64 位整数初始化错误