缓冲区被使用,但可能没有被初始化(Visual Studio中)
这是我c++
代码片段:缓冲区被使用,但可能没有被初始化(Visual Studio中)
char buff[512];
memset(buff, ' ', sizeof(buff));
GetModuleFileName(NULL, buff, _MAX_PATH);
char *file = strrchr(buff, '.');
看来buff
在第一线进行初始化。但是,我得到这个从Visual Studio(这是一个警告,而不是一个错误,我想删除这个警告):
'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,'\0');
你需要改变一些代码,使用正确,但:
GetModuleFileName(NULL, buff.data(), _MAX_PATH);
char *file = strrchr(buff.data(), '.');
而且你应该初始化你的NUL字符而不是空格的缓冲区(' '
):
memset(buff, '\0', sizeof(buff));
// ^^
“但是别忘了叫 'delete [] buff;'” - 或者只是使用'std :: vector'或智能指针而忘记必须手动清理。 –
@Jesper当然,这将是更好的选择,但当然需要对OPs代码进行更多的更改。 – user0042
我只是碰巧认为,一个好的答案应该提及更好的选择,当它们存在时:)答案是教育的绝佳机会。 –
你是怎么声明'buff'的? – user0042
'看起来buff是在第一行初始化的'不,它不是。 “buff”是指针还是数组?如果它是一个指针,你有没有为它分配空间 - 例如。用'新'? –
初始化发生在声明点。 –