我遇到MSVS编译器问题,我有以下代码:
if (!list) {
*type = raw_data[*i++];
ptr = (char*) &size;
ptr[1] = raw_data[*i++];
ptr[0] = raw_data[*i++];
name = new char[size+1];
memcpy (name, raw_data+*i, size);
name[size] = '\0';
*i += size;
}
后来:
if (!list) {
s->name = name;
s->name_size = size;
}
list的值在这个函数中没有改变,但由于这个错误我无法编译代码:
错误1错误C4703:可能未初始化的本地指针变量 'name'使用
我发现这不是一个警告而是一个错误令人难以置信的烦恼。将bool更改为const bool也无济于事。有人知道如何在Visual Studio中忽略此特定错误,但仍显示其他错误/警告?
答案 0 :(得分:8)
我怀疑你正在通过编译器/sdl
选项,它告诉它将4703(和其他各种事物)视为错误而不是警告。
在对安全性存在偏执的情况下,将此视为错误是有意义的 - 编译器无法证明您所做的是安全的,因此它不会让代码通过。如果您不想这样做,请关闭/sdl
。
答案 1 :(得分:3)
在Visual Studio 2015中创建新项目(向导)时,SDL checks
有复选框。如果启用此选项,Visual Studio会将未初始化的变量报告为警告,作为潜在其他事项的一部分,更多信息{{3 }}
如果您已经有一个带有SDL检查的项目,您可以从项目属性中禁用它,如下面的屏幕截图所示。这样您就不必处理更改任何命令行参数。