我的一个程序,编译通过了,连警告也没有
可是运行的时候出现程序异常中断,我打开调试窗口,显示: kernel32.dll!77e53887() 
 kernel32.dll!77e53887() 
 mfc71d.dll!ATL::CTrace::TraceV()  行122 + 0x24 C++
 msvcr71d.dll!_CxxThrowException()  + 0x39 C++
>mfc71d.dll!AfxThrowMemoryException()  行221 C++
 mfc71d.dll!ATL::AtlThrow(HRESULT hr=E_OUTOFMEMORY)  行70 C++
 mfc71d.dll!ATL::CSimpleStringT<wchar_t,1>::ThrowMemoryException() 
 mfc71d.dll!ATL::CSimpleStringT<char,1>::Fork(int nLength=13)  行723
 mfc71d.dll!ATL::CSimpleStringT<char,1>::PrepareWrite2(int nLength=13)  
 mfc71d.dll!ATL::CSimpleStringT<char,1>::PrepareWrite(int nLength=13)  
 mfc71d.dll!ATL::CSimpleStringT<char,1>::Preallocate(int nLength=13)  
 mfc71d.dll!ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>
 mfc71d.dll!ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>
 mfc71d.dll!CFrameWnd::LoadFrame()  !!!!!!!!!!!!!!!!!//注意这里!!!!!!!!
 OilDistribute.exe!COilDistributeApp::InitInstance()  
 mfc71d.dll!AfxWinMain()  行39 + 0xb C++
 OilDistribute.exe!WinMain()
 OilDistribute.exe!WinMainCRTStartup()  行390 + 0x39 C
 kernel32.dll!77e614c7() 虽然我很菜,可是我也知道这是LoadFrame()函数除了异常,可是在这个阶段的异常
究竟是我的哪部分代码出了问题?
它们是不是应该还没有被执行啊?
我能想到的有关代码是:
CMainFrame::CMainFrame()
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
CChildView::CChildView()
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
可是连我自己也觉得牵强
我实在是没有办法了,急得快疯了,求求各位有此类经验的高手能给与指点
告诉我这可能是由于哪些问题引起的
我给大家拜个早年了!

解决方案 »

  1.   

    没有弄过VC.NET.
    仔细查查看,没有编译错误,并不代表没有运行期错误,两码事。
      

  2.   

    看见那么多**.dll,不会是缺少dll文件吧?
    你查查看!
      

  3.   

    TO: kuangjingbo(kuangjingbo) 
    你还别说,我还真重装了一次系统
    但我觉得这个可能性比较小请问还有那些别的建议?
    实在不行,我就得要么重建工程,要么重装系统了!
    劳民伤财呀!
      

  4.   

    再说,缺少dll文件的话,是不是应该在链接阶段报错?
    链接都很正常啊!
      

  5.   

    你可以在MainFrame的构造函数,OnCreate, PreCreateWindow等函数的入口处设置断点,就可以跟踪出来了。一般在OnCreate里面设置断点就差不多了,因为,问题很可能就出现在OnCreate里面。
      

  6.   

    to:MilitaryMiniatures(++) 我试过了
    我在MainFrame的PreCreateWindow,和OnCreate都设了断点
    可是还没到断点处就异常中断了
    而且根据错误提示,异常好像在CFrameWnd::LoadFrame()中还没来得及进入其它函数里
    我都快疯了!我也没重载CFrameWnd::LoadFrame(),
    在程序运行到那之前没有一个字符是我自己写的而且这个VC.Net运行其它程序的时候是正常的,可以排除系统故障
    肯定是我的代码没错
    今晚没有结果的话我就重建工程了
    请各位告诉我怎么把那些编辑好的对话框和工具栏转移到新工程中
    等查出原因,一定公布出来和大家讨论!
      

  7.   

    大家好,我的那个问题有结果了,现在公布我的研究结果:首先,我重新建立了一个工程
    然后把我自己编写的代码一段一段地添加到新的工程里来
    每添加完一个模块就编译连接一次,并且运行程序可以出现主窗体说明CFrameWnd::LoadFrame()还没有出现异常。这样的过程一直继续到原来工程全部的代码都已经添加进来了,然后编译,链接,运行!
    faint!
    主窗体还是“出乎意料”地出现了,并没有出现什么异常。
    我又打开两个工程(原来的那个,和新添加的那个)的文件夹,挨个文件地比较
    最后发现只有OilDistribute.ncb文件的大小不一样
    不怕大家笑话,我从来也没有研究过这个文件,只知道它里面好像记录着一些和工程
    的编译信息相关的东东。
    于是我就在原工程文件加中删除了这个文件,然后重新编译,链接,执行
    最后还是一样——异常中断!就在我快要山穷水尽的时候,我突然想到,会不会是debug文件夹里面的东东导致了
    重新编译的不彻底呢?于是我又打开debug文件加,把里面的是个叫“文件”的都杀死了
    尸体抛进了回收站里。
    这次再编译的时间显得明显的长,最后执行,OK!成功了!经历大概就是这样!
    我有几个问题和一些想法想和大家交流:
    首先,那个OilDistribute.ncb文件具体是干什么用的,里面就是装的是什么?
    其次,每一次重新编译debug文件夹里面的哪些文件不会被重新生成
    最后, 相信世界上不会只有仅仅出现一次的现象, 如果哪位朋友也遇了过同样的问题
    可以参考我的这次事故.非常乐意和大家讨论
    暂不结帖,欢迎都来说说经验和想法.
    在此谢谢大家
      

  8.   

    没错。我也遇到过这类问题。基本观点是在以前的有错误情况下编译过,结果编译出一些错误的文件在/DEBUG中,以及工程文件夹下的一些.ncb.opg之类的信息文件。把这些删掉后就会正常的。