8

我在使用 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:使用了可能未初始化的局部指针变量“名称”

我发现这不是警告而是错误,这令人难以置信。将 bool 更改为 const bool 也无济于事。有人知道如何在 Visual Studio 中忽略此特定错误,但仍显示其他错误/警告?

4

2 回答 2

11

我怀疑您正在向编译器传递/sdl选项,该选项告诉它将 4703(和其他各种东西)视为错误而不是警告。

在对安全性偏执的情况下,将其视为错误是有道理的 - 编译器无法证明您正在做的事情是安全的,因此它不会让代码通过。如果您不希望这样,请关闭/sdl.

于 2013-09-01T14:48:25.043 回答
8

当您在 Visual Studio 2015 中创建新项目(向导)时,有一个复选框SDL checks。如果启用此选项,Visual Studio 将报告未初始化的变量作为警告作为潜在其他事情的一部分,更多信息在这里

如果您已经有一个启用了 SDL 检查的项目,您可以从项目属性中禁用它,如下面的屏幕截图所示。这样您就不必处理更改任何命令行参数。

在此处输入图像描述

于 2016-07-18T20:07:18.563 回答