我的一个程序,编译通过了,连警告也没有
可是运行的时候出现程序异常中断,我打开调试窗口,显示: 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)
可是连我自己也觉得牵强
我实在是没有办法了,急得快疯了,求求各位有此类经验的高手能给与指点
告诉我这可能是由于哪些问题引起的
我给大家拜个早年了!
可是运行的时候出现程序异常中断,我打开调试窗口,显示: 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)
可是连我自己也觉得牵强
我实在是没有办法了,急得快疯了,求求各位有此类经验的高手能给与指点
告诉我这可能是由于哪些问题引起的
我给大家拜个早年了!
仔细查查看,没有编译错误,并不代表没有运行期错误,两码事。
你查查看!
你还别说,我还真重装了一次系统
但我觉得这个可能性比较小请问还有那些别的建议?
实在不行,我就得要么重建工程,要么重装系统了!
劳民伤财呀!
链接都很正常啊!
我在MainFrame的PreCreateWindow,和OnCreate都设了断点
可是还没到断点处就异常中断了
而且根据错误提示,异常好像在CFrameWnd::LoadFrame()中还没来得及进入其它函数里
我都快疯了!我也没重载CFrameWnd::LoadFrame(),
在程序运行到那之前没有一个字符是我自己写的而且这个VC.Net运行其它程序的时候是正常的,可以排除系统故障
肯定是我的代码没错
今晚没有结果的话我就重建工程了
请各位告诉我怎么把那些编辑好的对话框和工具栏转移到新工程中
等查出原因,一定公布出来和大家讨论!
然后把我自己编写的代码一段一段地添加到新的工程里来
每添加完一个模块就编译连接一次,并且运行程序可以出现主窗体说明CFrameWnd::LoadFrame()还没有出现异常。这样的过程一直继续到原来工程全部的代码都已经添加进来了,然后编译,链接,运行!
faint!
主窗体还是“出乎意料”地出现了,并没有出现什么异常。
我又打开两个工程(原来的那个,和新添加的那个)的文件夹,挨个文件地比较
最后发现只有OilDistribute.ncb文件的大小不一样
不怕大家笑话,我从来也没有研究过这个文件,只知道它里面好像记录着一些和工程
的编译信息相关的东东。
于是我就在原工程文件加中删除了这个文件,然后重新编译,链接,执行
最后还是一样——异常中断!就在我快要山穷水尽的时候,我突然想到,会不会是debug文件夹里面的东东导致了
重新编译的不彻底呢?于是我又打开debug文件加,把里面的是个叫“文件”的都杀死了
尸体抛进了回收站里。
这次再编译的时间显得明显的长,最后执行,OK!成功了!经历大概就是这样!
我有几个问题和一些想法想和大家交流:
首先,那个OilDistribute.ncb文件具体是干什么用的,里面就是装的是什么?
其次,每一次重新编译debug文件夹里面的哪些文件不会被重新生成
最后, 相信世界上不会只有仅仅出现一次的现象, 如果哪位朋友也遇了过同样的问题
可以参考我的这次事故.非常乐意和大家讨论
暂不结帖,欢迎都来说说经验和想法.
在此谢谢大家