函数debug通过,执行正常。release报内存错误。帮我找找原因

zh_zh_y 2005-10-22 09:28:49
void CDxf::ReadARC()
{
char str1[20],str[20];


float x=0,y=0,z=0;
float radius=0,startAngle=0,endAngle=0;
char *ps=NULL;

FILE *fp=fopen("2000DXF.dxf","r");

int count=0;

if (fp==NULL)
{
MessageBox(NULL,"file open error.\n","skjnk",0);
return;
}


while(!feof(fp))
{
//从文件中读取一行数据
fscanf(fp,"%s\n",str);
count++;
}

fclose(fp);
fp=NULL;

}
...全文
119 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiulg 2005-10-22
  • 打赏
  • 举报
回复
因为你在栈中只分配了20 BYTE大小的空间,
但是读文件出来的一行大于20 BYTE.

这时候系统释放字符串的时候, 你就会访问到非你所分配的空间, 因此会有栈溢出的错误
zh_zh_y 2005-10-22
  • 打赏
  • 举报
回复
根据楼上qiulg(早起三年)所说,问题解决了。
还请qiulg(早起三年)能不能说说为什么会出现这个溢出的问题?
zh_zh_y 2005-10-22
  • 打赏
  • 举报
回复
没有出现内存泄漏的情况。
qiulg 2005-10-22
  • 打赏
  • 举报
回复
是呀, 肯定是在返回的时候报错嘛.应为栈溢出了.

我测试了你的例子, 就是我的说的原因
guxingfeiyu 2005-10-22
  • 打赏
  • 举报
回复
内存泄漏了,当然在函数返回的时候会出现错误,你看看Debug的时候在函数返回的时候结果窗中会出现一些类似于16进制数据的东东,那就是内存泄漏。
zh_zh_y 2005-10-22
  • 打赏
  • 举报
回复
谢谢楼上的回答,但不是这个原因。我在Release版本中,单步跟踪,直到fp=NULL;都没有报错,一旦函数返回的时候报错。
qiulg 2005-10-22
  • 打赏
  • 举报
回复
char str1[20],str[20];分配得太小了, 溢出了
char str1[63999], str[63999].再试试

16,551

社区成员

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

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

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