Я пытаюсь запустить цикл for, который заполняет массив гистограмм. Всякий раз, когда я запускаю этот код, я продолжаю получать ту же ошибку, заявляя:
"Error in `./Analysis.exe': free():" *Some memory locations*
"Filled mass arrayAborted (core dumped)"
Я новичок в c ++, так что, скорее всего, есть некоторые проблемы с памятью, которые я здесь не рассматриваю.
Я попытался проанализировать, где происходит сбой цикла, изменив переменную «Макс» так, чтобы цикл продолжался только до предопределенной точки. Оказывается, что цикл всегда терпит неудачу на последней итерации цикла. Похоже, что цикл проходит через предопределенную память, поэтому я выделил (я думаю) достаточно памяти для переменной mm до начала цикла.
'''
int main(){
// Initializing the pointers' types
TFile *f;
TDirectoryFile *dir;
TTree *tr;
TCanvas *BM_canvas;
// Initializing the B mass variable
Double_t B_M;
// Opening the file
f = new TFile("*Name of root file*");
// Extracting the directory from the file
dir = (TDirectoryFile*)f->Get("*Name of TDirectory file*");
// Extracting the tree from the directory
tr = (TTree*)dir->Get("*Name of tree*");
// Setting the branch address to a pointer with the same name
tr->SetBranchAddress("B_M", &B_M);
// Getting the number of entries and printing
int nentries=tr->GetEntries();
cout<<nentries<<endl;
// Defining a histogram for the mass
TH1F *Mass = new TH1F("Mass","",10000,0,100000);
int max = 7915;
double *mm;
mm = new double[max];
for (int i=0; i<max; i++){
tr->GetEntry(i);
*mm = B_M;
if (mm != 0){
Mass->Fill(*mm);
}
}
cout << "Filled mass array";
return 0;
}
'''
Я ожидаю, что результатом будет заполненный массив Mass с записями, взятыми из листьев "B_M" в корневом файле.
Я попытался вообще пропустить переменную mm, так как это могло вызвать проблему, однако та же ошибка сохраняется. Даже когда я выхожу из цикла, я получаю сообщение об ошибке "* Break * нарушение сегментации"