2016-06-27 7 views
1

Я имею дело с недоуменным вопросомC++ - Как освободить память на массиве

Прежде всего, я должен открыть некоторые файлы и сделать некоторые операции. для этого я должен определить некоторые массивы. То, что я хотел бы сделать, - удалить массив перед тем, как перейти к следующему файлу. Я знаю, что я мог бы динамически определять массивы, но

  1. Я не знаю, априори размер
  2. я советовал не связываться с динамическим распределением

Так есть способ «стереть» не динамически определенный массив?

пример кода является следующий

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 

Любая идея о том, как может быть достигнуто что-то подобное?

+6

Используйте векторы и позвольте им выйти из сферы действия, как вы уже делаете с векторами 'left',' right' и 'amplitude. –

+0

Вы понимаете, что 'Function_that_fill_arrays_PUSHBACK' работает на векторах, которые автоматически удаляют содержимое, верно? –

+0

@JoachimPileborg Что значит? – Thanos

ответ

5

Вам ничего не нужно делать.

Векторы left, right и amplitude создаются локально внутри тела цикла. Таким образом, каждый из них создается заново (с нулевыми элементами, так как это то, как они инициализируются) в начале тела цикла и уничтожается в конце - который освобождает память, которую они используют ..... на КАЖДОЙ итерации цикла ,

Вы можете проверить это, напечатав размеры векторов сразу после их объявления (то есть перед вызовом Function_that_fill_arrays_PUSHBACK()). Вы найдете, что размер равен нулю, каждый раз.