c++ - 如何释放数组上的内存
c++ - How to free up memory on an array
我正在处理以下令人费解的问题
首先,我要打开一些文件,做一些操作。为此,我必须定义一些数组。我想做的是在转到下一个文件之前删除数组。我知道我可以动态定义数组,但是
- 我不知道大小
- 有人建议我不要搞乱动态分配
那么有没有办法"erase"一个非动态定义的数组?
示例代码如下
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
知道如何实现这样的目标吗?
您根本不需要做任何事情。
向量 left
、right
和 amplitude
都是在循环体内本地创建的。所以每个人都在循环体的开始重新创建(零元素,因为这是它们的初始化方式),并在结束时销毁 - 这释放了他们使用的内存......在循环的每次迭代中.
您可以通过在声明向量后立即打印向量的大小来检查这一点(即在调用 Function_that_fill_arrays_PUSHBACK()
之前)。你会发现每次大小都是零。
我正在处理以下令人费解的问题
首先,我要打开一些文件,做一些操作。为此,我必须定义一些数组。我想做的是在转到下一个文件之前删除数组。我知道我可以动态定义数组,但是
- 我不知道大小
- 有人建议我不要搞乱动态分配
那么有没有办法"erase"一个非动态定义的数组?
示例代码如下
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
知道如何实现这样的目标吗?
您根本不需要做任何事情。
向量 left
、right
和 amplitude
都是在循环体内本地创建的。所以每个人都在循环体的开始重新创建(零元素,因为这是它们的初始化方式),并在结束时销毁 - 这释放了他们使用的内存......在循环的每次迭代中.
您可以通过在声明向量后立即打印向量的大小来检查这一点(即在调用 Function_that_fill_arrays_PUSHBACK()
之前)。你会发现每次大小都是零。