通过起诉根来编译它

时间:2016-06-18 14:55:43

标签: c++ arrays algorithm

(我想通过使用root包绘制直方图将此算法应用于附加数据,我有这个错误。

error Warning: Automatic variable a1 is allocated cuts3.C:31:
Error: Array index out of range v -> [2] valid upto v cuts3.C:31:
Error: Array index out of range v -> [3] valid upto v cuts3.C:31:
Error: Array index out of range v -> [4] valid upto v cuts3.C:31:
Error: Array index out of range v -> [5] valid upto v cuts3.C:31:
Error: Array index out of range v -> [6] valid upto v cuts3.C:31:
     {
     #include <string.h>
       gROOT->Reset();
       ifstream in;
       in.open("calibrated.txt");
       Int_t crysmax=8;
       double e[crysmax]; 
       Int_t nlines = 0;
       Int_t nbins2d=500;
       double coinmin=1, coinmax=1500, minE2d=1, maxE2d=1500, addcoin;

       TFile *f = new TFile("cuts.root","RECREATE");     
       TH2F *hgate2d = new   
       TH2F("Gate2D","",nbins2d,minE2d,maxE2d,nbins2d,minE2d,maxE2d);

       int i=0;
       while (!in.eof())
    {
        in >>e[0]>>e[1]>>e[2]>>e[3]>>e[4]>>e[5]>>e[6]>>e[7];

        addcoin=0.;

    // Background elimination.

    for (int k=0; k<crysmax; k++)
    { 

    double v[k] = log(log(sqrt(e[k]+1)+1)+1);
    for (int p=1; p<=6; p++)
    {
    for (k=p; k<crysmax-p; k++)(
    a1=v[k];
    a2=(v[k-p]+v[k+p])/2;
    double w[k]=min(a1,a2);
    }

    for (k=p; k<crysmax-p;k++)
    {
    v[k]= w[k];
    }

    for (k=0; k<crysmax; k++)
    {
    double b[k]=exp(exp(v[k]-1)-1)* exp(exp(v[k]-1)-1)-1;
    }

     for (int k=0;k<crysmax;k++)
        {
            addcoin=0.;
          if (e[k]>=coinmin&&e[k]<=coinmax) 
          {
            for (int kk=0;kk<crysmax;kk++)
            {
          if (kk!=k) addcoin+=e[kk];
            } 
        hgate2d->Fill(e[k],addcoin);    
          }
         }


        nlines+=1;
        cout << nlines << endl;
    }
        in.close();

       gStyle->SetPalette(1);
       gStyle->SetOptStat(0);
       hgate2d->Draw();                        //  Draw("COL");

         b = new TBrowser();
       f->Write();

    }

1 个答案:

答案 0 :(得分:0)

这一行存在问题:

double v[k] = log(log(sqrt(e[k]+1)+1)+1);

在第一次迭代k == 0中,所以你试图声明一个零大小的数组。 我不太了解代码,告诉你如何修复它,但零大小的数组绝对不是你想要的那个。

您使用的是root翻译吗?如果是,我强烈建议你不要这样做。我允许一些非常模糊的东西,它的错误信息可能相当混乱。 Imho总是更好地编译代码。您将获得更好的错误消息,并且您可以确定您没有使用没有编译器允许的解释器的神秘功能(出于好的理由)。