看起来微软在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
答案 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;
出于同样的原因,此代码将触发相同的错误。所以,你为什么抱怨它?