我正在处理以下令人费解的问题

首先,我必须打开一些文件并执行一些操作。为此,我必须定义一些数组。我想做的是在转到下一个文件之前删除数组。我知道我可以动态定义数组,但是

  • 我不知道
  • 的大小
  • 被告知不要搞乱动态分配

  • 那么有没有办法“擦除”非动态定义的数组?

    下面是一个示例代码
    void Analyze(unsigned int first_run, unsigned int last_run, unsigned int last_segment){
    
        TFile *fin = new TFile(TString::Format("HPGe_%d_%d_%d.root", first_run, last_run, last_segment));
        for (int segm = 2; segm<=3; segm++){//loop for different files
            std::vector<double> left;
            std::vector<double> right;
            std::vector<int> amplitude;
            Function_that_fill_arrays_PUSHBACK(left, right, amplitude);
            for (int i=0; i<left.size(); i++){
                if (right[i]<=0.01){
                    cout << "Left side : " << left[i] << ", Right side : " << right[i] << ", Amplitude : " << amplitude[i] << endl;
                }
            }
            DELETE ARRAYS HERE
        }// end of loop over files
    
    }//end of function
    

    关于如何实现这样的想法?

    最佳答案

    您根本不需要做任何事情。

    vector leftrightamplitude都在循环体内本地创建。因此,每个循环体的开头都会重新创建一个(具有零个元素,因为它们是这样初始化的),并在循环体末尾销毁-这会在循环的每次迭代中释放它们使用的内存... 。

    您可以通过在声明 vector 后立即(即在调用Function_that_fill_arrays_PUSHBACK()之前)打印 vector 的大小来进行检查。您会发现大小每次都是零。

    关于c++ - 释放数组上的内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38053280/

    10-11 14:11