已使用缓冲区,但可能尚未初始化(在visual studio中) 这是我的C++代码的片段:

已使用缓冲区,但可能尚未初始化(在visual studio中) 这是我的C++代码的片段:,c++,visual-studio,initialization,buffer,C++,Visual Studio,Initialization,Buffer,看起来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在第一行被初始化了。但我从视觉研究中得到这是一个警告,不是错误,我想删除此警告:

'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:

您还应该使用NUL字符而不是空格“”初始化缓冲区:


你是怎么声明buff的?看起来buff是在第一行初始化的不,不是。buff是指针还是数组?如果它是一个指针,您是否为它分配了空间?例如,使用new?初始化发生在声明点。在尝试将其值传递给memset之前,您是否应该为buf分配一个值?我声明了char buff[512]@user0042但别忘了调用delete[]buff;-或者只是使用std::vector或智能指针,而忘记手动清理。@Jesper当然,这将是更好的选择,但当然需要对OPs代码进行更多更改。我只是碰巧相信,一个好的答案应该在存在更好的选择时提出来:答案是教育的最佳机会。@Jesper OK,我至少提到了std::vectorNo,我声明了charbuff[512];
delete [] buff;
std::vector<char> buff(_MAX_PATH,'\0');
GetModuleFileName(NULL, buff.data(), _MAX_PATH);
char *file = strrchr(buff.data(), '.');
memset(buff, '\0', sizeof(buff));
           // ^^