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

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

程序出现问题的情况如下:
当程序打开文件为一个比较小的文件(几十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容器。我对程序中的动态开辟内存的管理可以说是很仔细了,不过也不排除有这方面的原因!

如果哪位高手知道其中的原因,请不吝指教。
程序交工时间就快到了,我都快急死了!!!!
...全文
14 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoshao_0_0 2003-05-24
  • 打赏
  • 举报
回复
: fwj47(想飞) (
谢谢
顺便up
he_qiancsdn 2003-05-24
  • 打赏
  • 举报
回复
你的问题就出在你的fGetStr上,你最好规定你每次读入的数据量,很有可能是你调用的fgetstr堆栈溢出后出现许多的问题。
fwj47 2003-05-23
  • 打赏
  • 举报
回复
再说一个调试中的问题吧:
我调试程序的时候一开始遇到的一个问题是这样的
我在程序中定义了这样的变量
list<dxf_Line> LineList;
vector<Line> LineArray;
当LineList.size()增大到700多的时候。LineArray.size()的值突然由1变为一个非常大的值。此时LineArray还没有被任何函数调用。
后来我把vector<Line> LineArray 改为vector<Line> * LineArray才解决这个问题。
而当文件很小的时候却没有这些问题。
3jaja 2003-05-23
  • 打赏
  • 举报
回复
加大文件读写变量的数组下标,或用动态数组。
fwj47 2003-05-23
  • 打赏
  • 举报
回复
这些函数都是我自己编的,DEBUG下调试时在InputDxf函数返回前一切都正常,返回后才出现以上的问题!
yyfzy 2003-05-23
  • 打赏
  • 举报
回复
不清楚,帮你UP
realdreamer 2003-05-23
  • 打赏
  • 举报
回复
有源代码就直接跟踪到 dxf::InputDxf 方法里面啊. ]
你不会没有源码吧? 没有源码就不容易了. 问问技术支持, 能不能读这么大的文件, 能的话, 就是库有问题.
wuchuncai 2003-05-23
  • 打赏
  • 举报
回复
dxf.InputDxf这个函数可能有问题。
如果能在debug下运行,可以跟踪出出问题的地方
tryber 2003-05-23
  • 打赏
  • 举报
回复
可能是内存溢出.
turingbupt 2003-05-23
  • 打赏
  • 举报
回复
(1)换成static char str[StrSize];试试
(2)土一点但是有效的办法,监视&dxf处内存的变化,看看什么指令引起了该内存的变化
fwj47 2003-05-23
  • 打赏
  • 举报
回复
答非所问
DXF文件是以两行为一个单位的
xiaoshao_0_0 2003-05-23
  • 打赏
  • 举报
回复
读一行处理一行不好吗
呵呵
不过这代码很有意思,作过dxf读入的
收藏!
fwj47 2003-05-23
  • 打赏
  • 举报
回复
高手看看吧
fwj47 2003-05-23
  • 打赏
  • 举报
回复
怎么才能解决啊?
改成:
char *str;
str = new char[StrSize];
delete []str;

还是出现问题
zhoujinhua 2003-05-23
  • 打赏
  • 举报
回复
堆栈益处。呵呵
ruihuahan 2003-05-23
  • 打赏
  • 举报
回复
数组太大,堆栈溢出
char str[StrSize];
fgetstr(fp,str);

改成:
char *str;
str = new char[StrSize];
记住delete []str;
taianmonkey 2003-05-23
  • 打赏
  • 举报
回复
cong119@sohu.com
fwj47 2003-05-23
  • 打赏
  • 举报
回复
我刚刚改在VC.NET下编译,运行时出现
Run-Time Check Failure #2 - Stack around the variable 'tt' was corrupted.
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寄过去
SnowWolfSLF 2003-05-23
  • 打赏
  • 举报
回复
那就是InputDxf里边的问题了,跟进去看看,或者贴出来看看。

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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