在填充直方图的循环中出现错误 Filled mass arrayAborted (core dumped)

Getting error Filled mass arrayAborted (core dumped) in loop that fills histogram

我正在尝试 运行 一个填充直方图数组的 for 循环。每当我 运行 这段代码时,我都会收到同样的错误,说明:

"Error in `./Analysis.exe': free():" *Some memory locations* 
"Filled mass arrayAborted (core dumped)"

我是 c++ 的新手,所以可能有一些我在这里没有考虑的内存问题。

我已经尝试通过更改 "Max" 变量来分析循环失败的位置,以便循环仅继续到预定义的点。事实证明,循环总是在循环的最后一次迭代时失败。看起来循环正在遍历预定义的内存,这就是为什么我在循环开始之前为变量 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 * segmentation violation”

问题已解决。我不确定为什么 "TH1D *Mass = new TH1D(....)" 必须在打开 TFile 之前进行初始化。我猜测这里的解决方案是我无权写入 TFile 并且在 TFile 之后定义 TH1D 使得 TH1D 被写入 TFile。