VC生成了异常的代码,导致程序运行出错,难道确实是VC的有关问题吗

VC生成了错误的代码,导致程序运行出错,难道确实是VC的问题吗?
发现好几次这种问题了,比如:
if(a)
{
        a=5;
        fun();
}
else
{
        a=3;
        fun();
}
编译出来的结果逆向出来成了
if(a)
{
        a=5;
        fun();
}
else
{
        a=3;
}
第二个fun调用没了,真搞不懂,有点像自动优化的结果,但又绝对不是;

还有一种:
a=5;
fun();
if(b)
        fun();

逆向结果为:
a=5;
fun();
__asm   pop   edi;
也就是那个if块变成了一个pop   edi的指令,程序运行到这里的话就会堆栈不平衡而崩溃.

而第二种情况有可能重新编译一次又是对的。难道是因为我用的不是正版?

誰能帮我解决这个问题,以后天天来送分都可以,先谢谢了。

------解决方案--------------------
如果是VC6, 需要装补丁, 否则经常出现这样的问题. SP5 或 SP6
------解决方案--------------------
即使不装补丁,应该也不会有这么荒唐的错误
楼主可以尝试关闭编译的优化选项