变量怎么会突变,再次请教。

northsnake 2002-01-15 10:29:53
我再一个线程中进行计算,为何在运行过程中,时间一常pcom的一个变量b会突然变为10875909632,这个变量我在循环开始就赋值,一直没有改变它。其它变量有的也跳变。
下面是主程序代码以及出错的函数代码:
UINT ThreadFunc(LPVOID pParam)
{
CCompute com(64);
CCompute* pcom=&com;
pcom->flagei=1;
CParticlesI* pari3=NULL;//CParticlesI是另外一个类
pcom->Initial(0.21,6,6, 0.00000001, 0.2,0.00000001,
0.2,0.0,0, 1.0e-11,1000,3.3e19,100,-100,0.0);//这里初始化
for (int l=0;l<pcom->m_NP0;l++)
pcom->AddParticlesI(6.68e-23,4.8e-7);
pcom->m_NPI=pcom->GetParticlesICount();
//进入大循环

while(a<1000)
{
pcom->InitV(2.0e4,5.6e7,0.0);
pcom->flagei=1;
for(int a=0;a<pcom->m_NPI;a++)
{
pari3=pcom->GetParticlesI(a);
pari3->func();
}
pari3=NULL;
pcom->m_NPI=pcom->GetParticlesICount();
//计算电荷密度
pcom->Calcucharge();
pcom->Force();
pcom->Accelp();
pcom->Movep();
a=a+1;
}
}
void CCompute::Calcucharge()//计算电荷密度
{
CParticlesE* ppar=NULL;
CParticlesI* pparI=NULL;
CParticlesEe* ppare=NULL;
for(int ir=0;ir<b;ir++)//程序出错后调试停在这,b跳变
{
m_Grid[ir].m_rhog=0.0;
}
.........
}
我的重载的CCompute构造函数是这样的
CCompute::CCompute( int b0)
{
b=b0;
m_Grid=new CGrid[b];

}
CGrid是另外一个类,跳变的正是b,我的b是在构造函数里初始化里的呀。

...全文
183 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
northsnake 2002-01-17
  • 打赏
  • 举报
回复
问题解决了,就出现在Acccelp()函数中的这样一条语句
pari->aexchange=(59.21-4.611*log(pari->m_energy))*1.0e-16;
在运行过程中,我想有可能是pari->m_energy出现了负值,而我没有判断它是否正负就计算。
谢谢各位。
northsnake 2002-01-15
  • 打赏
  • 举报
回复
我把类的变量初始化都放在构造函数里,依然没有解决问题。再次请教。
northsnake 2002-01-15
  • 打赏
  • 举报
回复
如何对这个类的变量设置临界区呢?不好意思,能不能举个例子。
南飞雁 2002-01-15
  • 打赏
  • 举报
回复
建议你对变量设置一个临界区.
northsnake 2002-01-15
  • 打赏
  • 举报
回复
m_Grid是一个指针。
zhang1000 2002-01-15
  • 打赏
  • 举报
回复
呵呵,可能是让编译器给优化了!
参考一下volatile关键字.
yarao 2002-01-15
  • 打赏
  • 举报
回复
请问你的m_Grid是一个指针还是一个数组?
northsnake 2002-01-15
  • 打赏
  • 举报
回复
我把pcom->都换成了com.,问题还是存在。
全做成全局变量的话,在类的内部该怎么使用呢。类有那么多成员变量。
angular_lucy 2002-01-15
  • 打赏
  • 举报
回复
建议不要用指针
Jeffery__Chen 2002-01-15
  • 打赏
  • 举报
回复
建议做成全局变量并初始化……

16,551

社区成员

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

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

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