首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个新手遇到的调试有关问题,

2012-02-09 
一个新手遇到的调试问题,急#includeiostream.h#includefstream.h#includestring.h#includeiomanip.

一个新手遇到的调试问题,急
#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位太能考古了。。。

热点排行
Bad Request.