C程序好似在free语句处中断。。。

panpan1202 2011-05-07 10:31:38
我在程序中添加了一些cout语句,结果显示C程序好似在free语句处中断,因为cout语句显示的比较密集。然后,我选择调试,则出现下图,点确定,什么反应也没有,不知道该怎么找错误,像出现这样的问题,一般是那些方面的原因?谢谢
...全文
307 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
panpan1202 2011-05-08
  • 打赏
  • 举报
回复
哪里有误啊?
xmu_才盛 2011-05-07
  • 打赏
  • 举报
回复
贴一下代码吧
贪食蛇男 2011-05-07
  • 打赏
  • 举报
回复
何为给指针赋值……malloc的吗?
确保malloc对应唯一的free,别几个线程同时 free
如果是 malloc的,你调试观察一下 malloc的返回值和 free的参数是否一样,如果一样,你再确认哪些地方写了这一块内存块。
经常犯的错误,像这样:
int size = strlen(str);
char* tmp = (char*)malloc(size);
memset(tmp, 0, size);
strcat(tmp, str);

这样由于分配的内存少一个字节,可能引起越界。
也可能你在别的地方写了这块内存,越界了,但越界不一定当时就崩掉,可能覆盖了crt的统计信息,导致 free的时候死掉。

[Quote=引用 3 楼 panpan1202 的回复:]

在free前给指针赋值了的
[/Quote]
ryfdizuo 2011-05-07
  • 打赏
  • 举报
回复
lz 贴一下代码吧。
「已注销」 2011-05-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 panpan1202 的回复:]

在free前给指针赋值了的
[/Quote]
如果赋的值是一个合法的堆上的内存地址的话,是不可能出现中断的。
检查一下赋值的代码。
panpan1202 2011-05-07
  • 打赏
  • 举报
回复
panpan1202 2011-05-07
  • 打赏
  • 举报
回复
在free前给指针赋值了的
panpan1202 2011-05-07
  • 打赏
  • 举报
回复
「已注销」 2011-05-07
  • 打赏
  • 举报
回复
要确定你free的指针不是野指针!!
panpan1202 2011-05-07
  • 打赏
  • 举报
回复
void act(int nIndex)
{ int uplimi,dolimi,zfawei;
double ruu,rvv,rww,ur,sp,cd,*juli,yemin;
TCell* g_CellsLimited;
uplimi = whereim(g_Cells,nCount,y[nIndex],'y')-1000;
if(uplimi<=0)
{
uplimi = 1;
}
dolimi = whereim(g_Cells,nCount,y[nIndex],'y')+1000;
if(dolimi>nCount)
{
dolimi = nCount;
}

zfawei = dolimi-uplimi+1;
g_CellsLimited = (TCell*)malloc(zfawei*sizeof(TCell));
juli = (double*)malloc(zfawei*sizeof(double));
copymesh(g_CellsLimited,g_Cells,uplimi,dolimi);
for(int i=1; i<=zfawei; i++)
{
juli[i] = (g_CellsLimited[i].x-x[nIndex])*(g_CellsLimited[i].x-x[nIndex])+(g_CellsLimited[i].y-y[nIndex])*(g_CellsLimited[i].y-y[nIndex])+(g_CellsLimited[i].z-z[nIndex])*(g_CellsLimited[i].z-z[nIndex]);

}
yemin = juli[1];
for(i=1; i<=zfawei; i++)
{
if(juli[i]<yemin)
{
yemin = juli[i];
}
}

for(i=1; i<=zfawei; i++)
{
if(fabs(juli[i]-yemin)<1.0e-6)
{
ruu = g_CellsLimited[i].vx - cx[nIndex];
rvv = g_CellsLimited[i].vy - cy[nIndex];
rww = g_CellsLimited[i].vz - cz[nIndex];
}
}
cd = 64;
sp=pi*diam[nIndex]*diam[nIndex]; //////////颗粒截面积
Fdx[nIndex] = cd*airro*fabs(ruu)*sp*ruu/2;
Fdy[nIndex] = cd*airro*fabs(rvv)*sp*rvv/2;
Fdz[nIndex] = cd*airro*fabs(rww)*sp*rww/2;

Fnsum[1][nIndex] = Fnsum[1][nIndex] + Fdx[nIndex];
Fnsum[2][nIndex] = Fnsum[2][nIndex] + Fdy[nIndex];
Fnsum[3][nIndex] = Fnsum[3][nIndex] + Fdz[nIndex];
cout<<Fnsum[1][nIndex]<<" "<<Fnsum[2][nIndex]<<" "<<Fnsum[3][nIndex]<<endl;
free(g_CellsLimited);
free(juli);
}

Defonds 2011-05-07
  • 打赏
  • 举报
回复
贴代码看看,到底咋回事呢

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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