(我想通过使用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();
}
答案 0 :(得分:0)
这一行存在问题:
double v[k] = log(log(sqrt(e[k]+1)+1)+1);
在第一次迭代k == 0
中,所以你试图声明一个零大小的数组。
我不太了解代码,告诉你如何修复它,但零大小的数组绝对不是你想要的那个。
您使用的是root翻译吗?如果是,我强烈建议你不要这样做。我允许一些非常模糊的东西,它的错误信息可能相当混乱。 Imho总是更好地编译代码。您将获得更好的错误消息,并且您可以确定您没有使用没有编译器允许的解释器的神秘功能(出于好的理由)。