LINUX.ORG.RU

динам. память в ц++


0

0

Я не программист, но пришлось взяться за вещи на c++; уровень у меня нулевой, прошу это учесть при объяснениях :-)
Дело такое: если я имею что-то вроде:
if (foo)
{
   float *bar = new float [runtime_N];
   ...
  -> тут <-----------------------|                      
}                                |
                                 |
то                               |
delete [] arr;                   |  
должно стоять там, правильно? -- |
(в конце блока)

Второй вопрос: если вышестоящий блок вызывается многократно,
а deletом там и не пахло, то рано или поздно не останется памяти и программа упадет? (Догадываюсь, что да. Этот ли случай называется memory leak?)

И третий: освобождается ли занятая память после завершения программы (если не был вызван delete), или при следующем запуске память все еще недоступна?
anonymous
Ответ на: комментарий от tailgunner

Наверное, наивный вопрос, но, чисто теоретически - какой смысл оставлять память зарезервированной, если указателем на неё уже не воспользоваться? Или на уровне компилятора это нетривиальная задача?

anonymous
()
Ответ на: комментарий от anonymous

> Или на уровне компилятора это нетривиальная задача?

на уровне рантайма это решается с помощью garbage collection

на уровне компиляции это нестандартная задача, потому что вызов любой фунции f(указатель) требует анализа этой функции на предмет того что она не запоминает где-нибудь этот указатель (или указатель+смещение)

dilmah ★★★★★
()
Ответ на: комментарий от anonymous

>Наверное, наивный вопрос, но, чисто теоретически - какой смысл оставлять память зарезервированной, если указателем на неё уже не воспользоваться? Или на уровне компилятора это нетривиальная задача?

На уровне компилятора она алгоритмически не решается. Точнее нельзя, например, алгоритмически узнать есть ли в программе утечка или нет. Можно взять какой либо ЯП c GC, но там тоже некоторое подобие утечек бывает (если забыть занулить указатель на не нужную по смыслу программы память).

ival ★★
()
Ответ на: комментарий от ival

Утечки памяти можно отлавливать - valgrind, electric fence и прочая. Другое дело, что это делается на этапе отладки, т.к. велики накладные расходы.

Legioner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.