TH1F *hist = new TH1F(); //some data what i have read TH1F smooth; vector diff; Int_t xmin, xmax; vector f_peaks; double *pars; double peak_min (const double *par) { //some operations, it all works fine TH1F *hist_smooth = new TH1F(); vector f_peaks; *hist_smooth = Smoothing(hist, par[0], xmin, xmax); Background(hist_smooth, par[1], par[2], xmin, xmax); Deconvolution(hist_smooth, par[3], par[4]*100, xmin, xmax); f_peaks = find_peaks (hist_smooth, diff.size() + 1,par[5], par[6]/100, xmin, xmax); double square = 0; vector diff_est; if (f_peaks.size() < diff.size()+1) { square = 200; delete hist_smooth; return square; } for (Int_t j =0; jSetMaxFunctionCalls(100000); min.SetMaxIterations(10); min.SetTolerance(0.1); min.SetVariable(0,"Smooth",variable[0], step[0]); min.SetVariable(1,"Window",variable[1], step[1]); min.SetVariable(2,"Smooth back",variable[2], step[2]); min.SetVariable(3,"IRF_sig",variable[3], step[3]); min.SetVariable(4,"Decon iter",variable[4], step[4]); min.SetVariable(5,"Sigma",variable[5], step[5]); min.SetVariable(6,"Tresh",variable[6], step[6]); min.SetVariableLimits(0,0,12); min.SetVariableLimits(1,0,18); min.SetVariableLimits(2,0,18); min.SetVariableLimits(3,1,3); min.SetVariableLimits(4,0,20); min.SetVariableLimits(5,1,5); min.SetVariableLimits(6,0.1,20); min.SetPrintLevel(1); min.Minimize(); const double *xs = min.X(); for(int i=0; i<7; i++) { pars[i] = xs[i]; if(i==4) pars[i] = xs[i]*100; if(i==6) pars[i] = xs[i]/100; } } void all { //some code NumMin (); //this function works, results are printed, then ROOT crashes //code after NumMin doesn't execute }