he thread 0x1FC has exited with code 0 (0x0)???

stingself 2008-02-25 11:42:00
我(新手)的程序在调试中出现了内存溢出问题,可是找不到问题在哪里,请问he thread 0x1FC has exited with code 0 (0x0)是什么意思,怎样才能尽快的找到程序的错误(程序中大量使用了指针,动态分配内存,释放内存)。请求帮忙,谢谢谢谢!!
...全文
1634 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lala_benben 2008-02-26
  • 打赏
  • 举报
回复
米代码看不出来哪出问题了。。。
happynxy 2008-02-26
  • 打赏
  • 举报
回复
你帖的he thread 0x1FC has exited with code 0 (0x0)意思不是内存溢出
stingself 2008-02-26
  • 打赏
  • 举报
回复
部分代码:
double Pot_energy(int NTOT, Atom *atom, Position *position_start)

{
double Separation(int i, int j, Position *position, Ratio *ratio);
double E_pot_tot, cw, r_m;
int i, j;
double r_ij;
Position *position;
Ratio *ratio;
position =position_start;
E_pot_tot=0.0;cw=93.16*1.380662e-23;r_m=3.868;

for(i=1; i<NTOT; i++){
for(j=i+1; j<=NTOT; j++){
r_ij=Separation(i, j, position, &ratio);
E_pot_tot+=cw*(pow(r_m,12)/pow(r_ij,12)-2*pow(r_m,6)/pow(r_ij,6));
}
}
return E_pot_tot/NTOT;
}

void Force_tot(int NTOT, Atom *atom, Position *position_start,
Force *force_start)
{
double Separation(int i, int j, Position *position, Ratio *ratio);
double Force_tot, cw, r_m;
long double dummy_rm6, dummy_rm12;
int i, j;
long double r_ij;

Position *position;
Force *force;
Ratio *ratio;

position=position_start;
force=force_start;
/*{
force=(Force *)calloc(NTOT+1, sizeof(Force));
if(!force){
printf("memory running out(force_sr)-abortion");
exit(1);
} */
cw=93.16*(1.380662e-23);
r_m=3.868;
dummy_rm6=r_m*r_m;
dummy_rm6=6*dummy_rm6*dummy_rm6*dummy_rm6;
dummy_rm12=0.3333333333*dummy_rm6*dummy_rm6;

for(i=0; i<=NTOT; i++){
(force+i)->x=(force+i)->y=(force+i)->z=0;
}


for(i=1; i<NTOT; i++)
{
for(j=i+1; j<=NTOT; j++)

{
printf("i1=%d, j=%d\n", i, j);
r_ij=Separation(i, j, position, &ratio);
printf("i2=%d, j=%d, r_ij=%lf\n", i, j,r_ij);

(force+i)->x=(dummy_rm12/pow(r_ij,13)-dummy_rm6*pow(r_ij,7))*ratio->x;
(force+i)->y=(dummy_rm12/pow(r_ij,13)-dummy_rm6*pow(r_ij,7))*ratio->y;
(force+i)->z=(dummy_rm12/pow(r_ij,13)-dummy_rm6*pow(r_ij,7))*ratio->z;
(force+j)->x = -(force+i)->x;
(force+j)->y = -(force+i)->y;
(force+j)->z = -(force+i)->z;

}
}

}
/* Calculate separation of particles i and j */

double Separation(int i, int j, Position *position_start, Ratio *ratio)
{
void MinImage(double *deltax, double *deltay, double *deltaz);

Position *position;
double delta_x, delta_y, delta_z;
double r_ij;



position=position_start;
/* position-- ;*/ /* start counting at zero ! */
printf("is=%d, j=%d\n", i, j);
delta_x = (position+j)->x - (position+i)->x;
delta_y = (position+j)->y - (position+i)->y;
delta_z = (position+j)->z - (position+i)->z;

MinImage(&delta_x, &delta_y, &delta_z);

r_ij = sqrt(sqr(delta_x)+sqr(delta_y)+sqr(delta_z));

/* calculate components */

ratio->x = delta_x/r_ij;
ratio->y = delta_y/r_ij;
ratio->z = delta_z/r_ij;
printf("is2=%d, j=%d\n", i, j);
return r_ij;
}

/* minimum image convention (Allen p.28) */

void MinImage(double *deltax, double *deltay, double *deltaz)
{
if (*deltax > Lhcell_a) *deltax -= 2*Lhcell_a;
if (*deltax < -Lhcell_a) *deltax += 2*Lhcell_a;
if (*deltay > Lhcell_b) *deltay -= 2*Lhcell_b;
if (*deltay < -Lhcell_b) *deltay += 2*Lhcell_b;
if (*deltaz > Lhcell_c) *deltaz -= 2*Lhcell_c;
if (*deltaz < -Lhcell_c) *deltaz += 2*Lhcell_c;
}
独孤过儿 2008-02-25
  • 打赏
  • 举报
回复
thread 以exit(0)退出,应该是正常结束了啊...

问题应该不是出在这里吧
星羽 2008-02-25
  • 打赏
  • 举报
回复
代码不是很多的话,贴代码吧
manio 2008-02-25
  • 打赏
  • 举报
回复
先用LINT试试找错
arong1234 2008-02-25
  • 打赏
  • 举报
回复
调试要看编译器是啥的,而且内存到底有没有泄漏也不一定,有人看到进程占用内存在上升,就认为泄漏,这是错误的

看看这个:http://blog.vckbase.com/arong/archive/2007/06/25/27060.html
babyvox1999 2008-02-25
  • 打赏
  • 举报
回复
— —||
qdk0901 2008-02-25
  • 打赏
  • 举报
回复
同意楼上,并且用二分法
mathe 2008-02-25
  • 打赏
  • 举报
回复
the thread ....吧
这句报告没什么意思,这个线程正常退出了。
C中的内存越界是很难查的,再有经验的程序员也可能会倒在这个问题上。
在程序里面添加一些Trace看看吧。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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