Visual Studio 2010运行时检查失败#3

时间:2011-09-23 18:38:43

标签: c windows visual-studio-2010 coding-style runtime

看起来微软在VS2010中再次回火。这是我的代码

#include "string.h"
typedef struct s_test
{
    unsigned char a[20];
} t_test, *p_test;
void initialize(t_test t)
{
    memset(t.a, 0, 20);
}
void main()
{
    t_test t;
    initialize(t);
}

然后抛出

Run-Time Check Failure #3 - The variable 't' is being used without being initialized.

嗯...因为在其他情况下运行时检查器确实有帮助,所以我不太可能在解决方案中关闭它。但是我该怎么办呢?您可能会建议更改参数传递给指针的方式。然而,对于一致的编码风格,这将是一种令人不快的体验。现在我感觉像是为了这个BRILLIANT的东西而感谢MS; p

2 个答案:

答案 0 :(得分:2)

那是因为你通过了价值 - 一个酉值。按如下方式定义初始化函数,以便它可以实际修改传入的对象,一切都很好:

void initialize(t_test *pt) 
{
    memset(pt->x, 0, 20); // x not a
}

另外,为了所有的圣洁,改变:

void main()

int main()

答案 1 :(得分:2)

嗯,您收到的错误报告是完全有效且适当的错误报告。这正是您正在做的事情:您正在使用未初始化的值。您正在尝试复制未初始化的对象 - 在这种情况下,当然需要来自tun-time checker的报告。

基本上,您在代码中所做的事情等同于此

int a, b = a;

出于同样的原因,此代码将触发相同的错误。所以,你为什么抱怨它?