编译器是VC6.0,在构造函数定义m_bFirstGo = TRUE;在菜单“新游戏”的处理函数里是这样的:
if(!m_bFirstGo)
{
......
}
而要使m_bFirstGo变成FALSE需要点击另外一个菜单项,原先好好的,我又写了几个函数,这几个函数根本没用到m_bFirstGo,当我点击菜单“新游戏”,m_bFirstGo变成了FALSE,执行了上面if里的语句。   最后祝大家新年快乐!

解决方案 »

  1.   

    在Edit菜单中,选择“Find in files”命令,在你的工程的所有文件中搜索m_bFirstGo,看看所有关于它的语句都是什么,估计是无意中修改了它的值
      

  2.   

    有点意思,能让我看看吗?[email protected],:)
      

  3.   

    刚才玩了下游戏(暗黑)
    to:fengqinggao(风清高) 已经发了,注意查收,麻烦你了同时也谢谢大家
      

  4.   

    经过重建工程,一步步找问题。原来我在菜单“新游戏”的处理函数里初始化的变量没在构造函数里初始化(当然m_bFirstGo都初始化了),这些问题居然在debug版本没体现出来,最大的错误一个结构体变量我又用这名#define了一个常量。都怪我不小心,这个常量是从别的类里拷过来的。值得深思,debug版本不可靠,现在我是一有改动,就直接release
      

  5.   

    经过2个小时的疯狂调试,终于发现了问题所在,准备来这里回复时,楼主已经解决了,呵呵,也好主要问题还是出在memset上,可能因为一开始没有给m_Steps申请空间,后来申请时,新申请的空间是从定义m_Steps的地方开始,于是m_Steps后面定义的所有变量(当然包括m_bFirstGo)的值全部被覆盖,因为新申请的空间都没有赋值,所以m_bFirstGo也就被赋予了0值,也就是False了,如果要测试,你将m_Steps的定义放在最后定义,就没有这个问题了当然,重名也是一个很大的问题,最起码是隐患,但是这里的错误似乎与它无关,也与Debug或者Release模式无关,是memset申请内存的位置问题我是这么理解的,欢迎批评指正,:)
      

  6.   

    经过2个小时的疯狂调试,值得感动。
    有一点我不完全同意,m_Steps是一个数组,已有固定大小,不是动态new出来的,STEP的结构是
    typedef struct _STEP{
    BYTE chessman;
    BYTE coordinate;
    }STEP;STEP m_Steps[225];
    sizeof(STEP)等于2字节,后来我又#define STEP 128,而这是STEP应该占有4个字节,所以
    memset(m_Steps,0,225*sizeof(STEP));大小增加了一倍,覆盖了下面的变量(包括m_bFirstGo),
    罪魁祸首还是在重名上,我是这么理解的。