本人用VC6在写一个程序。
最初编写时,使用了126组数据,一切正常。
但前日将数据量增加至1500组时,出现对一个之前正常的CStirng变量的操作为非法的错误消息,点击调试按钮,出现一个消息框内容如下:
“Unhandled exception in TBT.exe: 0xC0000005: Access Violation”
确定后,工作窗口部分内容:
...
00409305 lea ebx,[esi+73A0h]
0040930B lea ecx,[esp+14h]
>>0040930F mov eax,dword ptr [eax-8]
00409312 push eax
00409313 push 411708h
...
工作窗口下方的错误消息框内容如下:
Loaded 'E:\TBT\Release\TBT.exe', no matching symbolic information found.
Loaded 'C:\WINDOWS\Downloaded Program Files\CNSMIN.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\VERSION.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\SHLWAPI.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\COMCTL32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\IMM32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\MFC42.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\MFC42LOC.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\USER32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\GDI32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\ADVAPI32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\MSVCRT.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\KERNEL32.DLL', no matching symbolic information found.
最初编写时,使用了126组数据,一切正常。
但前日将数据量增加至1500组时,出现对一个之前正常的CStirng变量的操作为非法的错误消息,点击调试按钮,出现一个消息框内容如下:
“Unhandled exception in TBT.exe: 0xC0000005: Access Violation”
确定后,工作窗口部分内容:
...
00409305 lea ebx,[esi+73A0h]
0040930B lea ecx,[esp+14h]
>>0040930F mov eax,dword ptr [eax-8]
00409312 push eax
00409313 push 411708h
...
工作窗口下方的错误消息框内容如下:
Loaded 'E:\TBT\Release\TBT.exe', no matching symbolic information found.
Loaded 'C:\WINDOWS\Downloaded Program Files\CNSMIN.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\VERSION.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\SHLWAPI.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\COMCTL32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\IMM32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\MFC42.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\MFC42LOC.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\USER32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\GDI32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\ADVAPI32.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\MSVCRT.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\SYSTEM\KERNEL32.DLL', no matching symbolic information found.
解决方案 »
- [非技术散分贴]送祝福!见者有份,一个IT悲催男的愿望!望各位大牛们实现!
- WideCharToMultiByte得到乱码
- 请高手指教
- 擦除icon图标
- 多文档程序中,右击菜单栏,出来一个框,应该响应啥事件?
- 求给定任意曲线的长度
- ATL编程该如何使用线程/多线程
- 千分寻求老鸟帮一MM修改程序!!!!!!!!!!!!!!!!
- 高人請進,關於MFC內部SubClassWindow的問題
- RegSetValueEx的参数问题
- 我想运行这个“HELLO WORLD”程序 但问题是.........(各位请进行,指点我一下)
- 一百分,doc/view框架时如何在view中使用CListctrl? msn的分组列表是不是使用CListctrl?
上面提到的数据存储在一个文件中,供程序运行时调用。
且CStirng变量在程序运行的前半部分的操作未产生非法操作,在后半部分产生非法操作。
“CString每次的数据不可以超过1000个字符。如果超过马上异常。”
不可能吧?在数据量增加之前(即使用126组数据时)CString的长度就大大的超过了1000个字符。但程序运行正常无误。再说,CStirng变量按程序设计,其长度在数据量增加前后是不会有变化的,他是按特定的格式保存对数据的统计信息。
StatisticReport(); //统计:函数中包含了大量对info变量的操作,函数无返回值;在程序中上面的两个函数紧挨着执行,中间没有任何执行代码。现在,我在“Statistic()”函数所有语句之后及“StatisticReport()”函数所有语句之前分别加入下列语句
CString bt;
bt.Format("长度:%d",info.GetLength());
MessageBox(bt);编译后执行到“Statistic()”函数,显示消息“长度:0”;
执行到“StatisticReport()”函数,显示消息“该程序执行了非法操作,即将关闭。...”;
点击调试按钮,即出现本贴主题内容中的信息。
说明是增加数据时才出问题,如果你不信,你可以直接写1000个字符拷入变量,
CString str;
str.format("%s","1000个字符........");
当然,你还可以用2000个字符试试.
程序肯定异常的.
参照上面2层的内容,我做了一个测试:在“Statistic()”函数所有语句之后加入以下语句CString bt;
bt.Format("长度:%d",info.GetLength()); //info为public
MessageBox(bt);显示info长度为9512。在“StatisticReport()”函数所有语句之前加入以下语句info+="a";
CString bt;
bt.Format("长度:%d",info.GetLength()); //info为public
MessageBox(bt);
MessageBox("通过");显示非法操作,说明错误出现在MessageBox("通过");语句之前。
info+="a"; 改为 info="a"; 后仍产生同样的错误。在“Statistic()”函数后执行 info="a"; 语句无误,正确显示info长度为1。
但其后的 info+=bt; 则产生同样的错误。