奇怪的程序错误,恳请高手指教!!!

fwj47 2003-05-23 12:17:06
我目前编写的一个程序中,出现了很奇怪的问题。

程序出现问题的情况如下:
当程序打开文件为一个比较小的文件(几十K)时,程序可以正常运行;但是当打开文件较大(也就是只有500k的文件)时,程序运行就会出现许多莫名其妙的错误;
具体出现的地方如下:

#include "stdafx.h"
#include "dxf.h"
int main(int argc, char* argv[])
{
DXF dxf; /*此时dxf的内存地址为:0x00460094*/
if ( !dxf.InputDxf("files/F.dxf") ) /*当此函数返回后,dxf的地址变为:0xcccccccc,里面的所有数据都消失了!!*/
{
printf("Error input\b");
getchar();
return -1;
}
........................................
........................................
我在用DEBUG调试的时候,内存中的数据在函数返回之前的一切情况均正常,但是为什么在这个函数返回后会出现这么奇怪的问题呢?
打开的文件只有500K,应该不会是文件大小的问题吧。但是当文件只有几十k的时候为什么能够正常运行呢?
测试中能打开并能正常运行的最大的文件是312k。

注:我的程序在VC下编译的,程序中用到了大量的STL容器。我对程序中的动态开辟内存的管理可以说是很仔细了,不过也不排除有这方面的原因!

如果哪位高手知道其中的原因,请不吝指教。
程序交工时间就快到了,我都快急死了!!!!
...全文
24 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tserpent 2003-05-23
  • 打赏
  • 举报
回复
很明显你的堆栈被破坏了。
改成这样试试:
DXF dxf;
int main(int argc, char* argv[])
{
/*此时dxf的内存地址为:0x00460094*/
if ( !dxf.InputDxf("files/F.dxf") ) /*当此函数返回后,dxf的地址变为:0xcccccccc,里面的所有数据都消失了!!*/
{
printf("Error input\b");
getchar();
return -1;
}
fwj47 2003-05-23
  • 打赏
  • 举报
回复
我刚刚改在VC.NET下编译,运行时出现
Run-Time Check Failure #2 - Stack around the variable 'tt' was corrupted.
fwj47 2003-05-23
  • 打赏
  • 举报
回复
我的堆栈为什么会被破坏呢?
fwj47 2003-05-23
  • 打赏
  • 举报
回复
BOOL DXF::InputDxf(char* filename)
{
int tt;
char str[StrSize];
FILE *fp;

if ((fp=fopen(filename,"r"))==NULL)
{
printf("´ò¿ªÎļþ %s ³ö´í\n",filename);
return FALSE;
}
while( !feof(fp) && !ferror(fp) )
{
try{
fscanf(fp,"%d",&tt);
fgetstr(fp,str);
}
catch(...)
{
printf("¶ÁÈëDXFÎļþ´íÎó!");
return FALSE;
}
if( strcmp(str,"SECTION")==0 ){
continue;
}
else if( strcmp(str,"HEADER")==0 ){
if( !header.DRead(fp))
return FALSE;
}
else if( strcmp(str,"CLASSES")==0 ){
if( !classes.DRead(fp))
return FALSE;
}
else if( strcmp(str,"TABLES")==0 ){
if( !tables.DRead(fp))
return FALSE;
}
else if( strcmp(str,"BLOCKS")==0 ){
if( !blocks.DRead(fp) )
return FALSE;
}
else if( strcmp(str,"ENTITIES")==0 ){
if( !entities.DRead(fp) )
return FALSE;
}
else if( strcmp(str,"OBJECTS")==0 ){
if( !objects.DRead(fp) )
return FALSE;
}
else if( strcmp(str,"THUMBNAILIMAGE")==0 ){
if( !thumbnailimage.DRead(fp) )
return FALSE;
}
else if( strcmp(str,"EOF")==0){
break;
}
else {
printf("Ignore some information!\n");
}
// str[0] = 0;
}//endwhile
if (fclose(fp)==EOF)
{
printf("¹Ø±ÕÎļþ %s ³ö´í\n",filename);
return FALSE;
}
return TRUE;
}
其余代码太长了,留下EMAIL我寄过去吧
rtdb 2003-05-23
  • 打赏
  • 举报
回复
还是贴DXF的代码出来让大家看一下吧。

24,856

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧