各位大哥,今天的错误不知道怎么来的,因为我敢保证昨天没有,先看看错误。(XP,VS2008,SP1,MDI程式)
第一张图:上面显示的是断点的位置,这里出错了,下部分是局部变量的值,其中的lpszFileName所指向的目录,是绝对不存在的。第二张图:这是我的给我的登录框发送消息时,第一个参数的状态,注意看m_hWnd的值是问号,但我依然收得到消息我的登录框是DOMADEL的,在OnInitDialog中把this指针赋给了m_Login。程序每次登录都会报第一图所示的这个错误,但却不是在某一固定的语句执行后,可能在前,或者在后,总之就是报这个错了,折腾了很久,已经没办法解决了,只有来求助,请各位大哥帮忙分析一下原因吗?

解决方案 »

  1.   

    单步调试一下,在doc下看看汇编语言的程序
      

  2.   

    堆栈中有这样一条:(按执行顺序,从底到顶)
    [user32.dll!77d187eb()],点此条显示没有可用的代码.
    【下面的框架可能不正确和/或缺失,没有为user32.dll加载符号】
    【user32.dll!77d8709()】,点此条依然显示没有可用的代码
    【mfc90d.dll!AfxWndProcBase(HWND_............】,点此处有代码了,接着向下


    直到
    【mfc90d.dll!AfxAssertValidObject(........)】就出现了第一幅图的情况!该怎么找呢,各位?
      

  3.   

    刚才运行又出问题了,这次虽是中断,但程序本身也弹出了一个WINDOWS错误
    但中断处在第一图那里,而提示的内容偏偏是lpszFileName所指向的目录文件,行号
    但我觉对没有这个目录和文件的,这是怎么回事?
      

  4.   

    自己再顶一下,有人帮忙分析吗?我始终怀疑这个lpszFileName所指示的目录,我根本没有这样的目录,为什么会这样?
      

  5.   

    lpszFileName 这个你都在哪里定义了,在哪里调用了,看看是那一步改变该值的!!
      

  6.   

    这种问题最好要在现场才方便解决。
    偶是很想来解决这种问题的,不过,偶不在现场啊,偶只能帮你猜猜问题在哪里了,
    1.调用 SendMessage 的线程是不是主线程?我怀疑应该不是主线程。
    2.调用 SendMessage 的时机?你不会是在 CXXXApp的构造函数里调用的吧?
      

  7.   

    我认为你不应该把重点放在 lpszFileName 的目录对不对,而应该是去找,为什么会造成程序的这种状态,
    我上面的回答就是去找运行出这种状态的原因。
    我可以肯定的是 lpszFileName 是 MFC 一个函数里的定义,不是你定义的,MFC 的代码运行了这么多年,我觉得出现这种 bug 的可能性不大,
      

  8.   

    我已经重写了,换了一种写法,发现可能是由于我接受的数据在内存中拷贝出错引起的。
    求教怎么拷贝结构体的数据呢?我的做法如下://接收四个结构体数据,分别为One,Two,Three,Four表示,传过来的都是指针;
    //我在我的类中再定义一个结构体来存储
    //定义:
    //Struct MyStruct
    //{
    //   One *MyOne;
    //    Two *MyTwo;
    //    Three *MyThree;
    //    Four *MyFour;
    //}
    //拷贝
        memcpy(&MyStruct->MyOne,&One,sizeof(One));
        memcpy(&MyStruct->MyTwo,&Two,sizeof(two));
        ...
    //拷贝完成后,可以看得到数据,但继续运行,就可以看到这个数据丢失了。结构体该怎样来拷贝?
      

  9.   

    最好重载operation =,不然每次都来几遍memcpy..
    这个拷贝怎么看上去怪怪的,指针拷贝避免出现指针悬挂,你这拷贝后2个结构体的指针指向同一份数据,最好拷贝数据而不是指针的值
      

  10.   

    难怪,这样拷贝出来是出来是指向同一地址吗?那么如果不重载operation =,如何复制一份数据到我定义的结构里面呢?
      

  11.   

    这样拷贝出来是出来是指向同一地址吗
    -----------------------------
    你调试下就知道了,memcpy这个API有什么用。怎么用最好查下MSDN那么如果不重载operation =,如何复制一份数据到我定义的结构里面呢?
    -----------------------------------------------------
    如果你这个结构体成员都是数组,可以直接赋值,但有指针,而且又没有重载operation=,那么只有逐个成员复制了。举个例子加入One类型是char,A是有值的MyStruct变量,定义MyStruct B,把A赋值给B
    int nLength = strlen(A.MyOne)+1;
    B.MyOne = new char[nLength ];
    memset(B.MyOne ,0,nLength );
    memcpy(B.MyOne,A.MyOne,strlen(A.MyOne) );
    这只是举个例子,如果是char*,可以直接用strcpy_s复制字符串,如果是其他类型的计算好缓冲区长度,memcpy之.
      

  12.   


    谢谢dahaiIO!
    原来这个这么复杂,以为很简单的,结构体我还得研究一下