编辑框的变量在调用函数后数值岂有此理变化.其中参数数组声明位置靠近调用函数却不变化
编辑框的变量在调用函数后数值莫名其妙变化.其中参数数组声明位置靠近调用函数却不变化
正在用VC6写一个函数:
int StressCount[100];
double CL;
double dlifecount=0.00;
UpdateData(true);
unsigned char imaterialtype;//材料类型
imaterialtype=m_materialtype.GetCurSel();
unsigned char ireliancetype;
ireliancetype=m_reliancectrl.GetCurSel();
double ftemp1,ftemp3;
unsigned char iloadtype;//负荷类型
iloadtype=m_loadtype.GetCurSel();
if(iloadtype==0)
{
CL=0.85;
ftemp1=0.9;
}
if(iloadtype==1)
{
CL=0.85;
ftemp1=0.75;
}
.
.//中间略去N多行哇啦哇啦的话
.
.//见证奇迹的一刻从下面开始
double MaxStressValue,MinStressValue;
//int StressCount[100];
for(int j=0;j<100; j++)
{
StressCount[j]=0;
}
MaxStressValue=0.0;
MinStressValue=0.0;
GroupStress(StressCount,&MaxStressValue,&MinStressValue);
double AttenuationFactor=ftemp1*freliancetype*m_dimension*m_surface*CL/m_notch;//为什么执行GroupStress后m_dimension变了
其中m_dimension,m_surface,m_nothc是三个编辑栏控件的值,调试时发现运行到GroupStress时这三个值还是对的分别是0.59,0.68,1.00 过了GroupStress却发现全都变成了5.8???e-39或4.45??e-8,(?表示其它数).当然AttenuationFactor都错了.进入GroupStress单步调,发现GroupStress函数中间运行时这三个参数都没变.只是在最后返回调用函数时变了.
诡异的是把前面的int StressCount[100];去掉.移到for(int j=0;j<100; j++)前,如前文加上int StressCount[100],发现这三个值在调用GoupStress后又是正常的.
十分不解,按道理m_dimension这三个编辑栏控件的值属于全局变量,在函数调用时不会变的.折腾了二天还搞不定,如果用权宜之计,又非常担心原理不清楚留下Bug,切望各位大虾出手搭救.谢谢
------解决方案--------------------
GroupStress(StressCount,&MaxStressValue,&MinStressValue);
此函数内有越界访问。
------解决方案--------------------
GroupStress 传入 StressCount 的大小, 函数内部以传入的大小来做处理, 不要越界
正在用VC6写一个函数:
int StressCount[100];
double CL;
double dlifecount=0.00;
UpdateData(true);
unsigned char imaterialtype;//材料类型
imaterialtype=m_materialtype.GetCurSel();
unsigned char ireliancetype;
ireliancetype=m_reliancectrl.GetCurSel();
double ftemp1,ftemp3;
unsigned char iloadtype;//负荷类型
iloadtype=m_loadtype.GetCurSel();
if(iloadtype==0)
{
CL=0.85;
ftemp1=0.9;
}
if(iloadtype==1)
{
CL=0.85;
ftemp1=0.75;
}
.
.//中间略去N多行哇啦哇啦的话
.
.//见证奇迹的一刻从下面开始
double MaxStressValue,MinStressValue;
//int StressCount[100];
for(int j=0;j<100; j++)
{
StressCount[j]=0;
}
MaxStressValue=0.0;
MinStressValue=0.0;
GroupStress(StressCount,&MaxStressValue,&MinStressValue);
double AttenuationFactor=ftemp1*freliancetype*m_dimension*m_surface*CL/m_notch;//为什么执行GroupStress后m_dimension变了
其中m_dimension,m_surface,m_nothc是三个编辑栏控件的值,调试时发现运行到GroupStress时这三个值还是对的分别是0.59,0.68,1.00 过了GroupStress却发现全都变成了5.8???e-39或4.45??e-8,(?表示其它数).当然AttenuationFactor都错了.进入GroupStress单步调,发现GroupStress函数中间运行时这三个参数都没变.只是在最后返回调用函数时变了.
诡异的是把前面的int StressCount[100];去掉.移到for(int j=0;j<100; j++)前,如前文加上int StressCount[100],发现这三个值在调用GoupStress后又是正常的.
十分不解,按道理m_dimension这三个编辑栏控件的值属于全局变量,在函数调用时不会变的.折腾了二天还搞不定,如果用权宜之计,又非常担心原理不清楚留下Bug,切望各位大虾出手搭救.谢谢
------解决方案--------------------
GroupStress(StressCount,&MaxStressValue,&MinStressValue);
此函数内有越界访问。
------解决方案--------------------
GroupStress 传入 StressCount 的大小, 函数内部以传入的大小来做处理, 不要越界