一个新手遇到的调试问题,急
#include <iostream.h>
#include <fstream.h>
#include <string.h>
#include <iomanip.h>
#include <math.h>
void main()
{
ifstream in( "TestOutput.txt ");
ofstream out( "regular.txt ");
int Max_i,Max_j,Max_k;
int i,j,k;
float x[10500];
float y[10500];
float z[10500];
double flux[10500];
double tempflux=0;
float r;
cin> > Max_i> > Max_j> > Max_k;
cin> > r;
float *b_x= new float[Max_i*Max_j*Max_k];
float *b_y= new float[Max_i*Max_j*Max_k];
float *b_z = new float[Max_i*Max_j*Max_k];
float *b_flux = new float[Max_i*Max_j*Max_k];
for(i=0;i <10500;i++)
{
in> > x[i]> > y[i]> > z[i]> > flux[i];
} //读入数据正常
float d;
int n=Max_i*Max_j*Max_k;
float s=(21+21)/Max_i;
float offset=r/s;
for( int m=0; m <10500; m++ )
{
for( i=int(x[m]/s-offset); i <int(x[m]/s+offset); i++)
for( j=int(y[m]/s-offset); j <int(y[m]/s+offset); j++)
for( k=int(z[m]/s-offset); k <int(z[m]/s+offset); k++)
{
b_x[n] = ((float)(21+21)/Max_i)*i-21;
b_y[n] = ((float)(20+20)/Max_j)*j-20;
b_z[n] = ((float)100/Max_k)*k;
d=sqrt((x[m]-b_x[n])*(x[m]-b_x[n])+(y[m]-b_y[n])*(y[m]-b_y[n])+(z[m]-b_z[n])*(z[m]-b_z[n]));
if( d <1e-6 )
tempflux=flux[m];
else if( d> r )
tempflux=0; else if( d <r ){ float w=(r-d)/(r*d);
tempflux=flux[m]*w;
w+=w;
b_flux[n]+=tempflux/w;
}
}
for( n=0; n <Max_i*Max_j*Max_k; n++ )
{
out < <setw(10) < <b_x[n] < < " " < <setw(10) < <b_y[n] < < " " < <setw(10) < <b_z[n] < < " " < <setw(10) < <b_flux[n] < <endl;
}
delete []b_x;
delete []b_y;
delete []b_z;
delete []b_flux;
}
我读入的文本文件是(以下是一部分):
0.40451 0.29389 0.50000 9.60110E-06
1.21353 0.88168 0.50000 9.57395E-06
2.02254 1.46946 0.50000 9.50305E-06
2.83156 2.05725 0.50000 9.39663E-06
可编译时出现数据类型转换会造成数据丢失警告,同时运行后会显示Debuge出错,然后输出全是:
-4.31602e+008 -4.31602e+008 -4.31602e+008 -4.31602e+008
[解决办法]
跟踪一下,在哪出错的。
出错时,查看调用堆栈,call stack
[解决办法]
b_x[n] = ((float)(21+21)/Max_i)*i-21;
b_y[n] = ((float)(20+20)/Max_j)*j-20;
b_z[n] = ((float)100/Max_k)*k;
n一直没变, 而且是越界了. 由于不知道LZ究竟想干什么,所以不好猜测在循环圈内n应该怎样取值.
[解决办法]
谢谢楼上二位!我这里的b_x[n]、b_y[n]、b_z[n]是代表一个点的三个坐标,其中n取值范围为0 < n <Max_i*Max_j*Max_k,这个点要在
for( i=int(x[m]/s-offset); i <int(x[m]/s+offset); i++)
for( j=int(y[m]/s-offset); j <int(y[m]/s+offset); j++)
for( k=int(z[m]/s-offset); k <int(z[m]/s+offset); k++)
范围内。问题可能处在这个地方,由于我是新手,不知道怎么查
[解决办法]
估计是赋值语句有问题;不要依赖于系统给你赋值,要手动的赋初值,否则很容易出错~~
[解决办法]
f10单步跟踪,查看监视窗口
[解决办法]
楼上2位太能考古了。。。