Другие языки программирования и технологии

Освобождение памяти C++

Привет народ. Короче написал такую штуку: #include"stdafx.h"

#include"iostream"

using namespace std;

int main(){

setlocale(LC_ALL, "Russian");

int mas[10][10];

for (int *i = new int(0); *i < 10; ++*i)

{

cout << '\n';

for (int *j = new int(0); *j < 10; ++*j){

*(*(mas + *i) + *j) = rand() % 10;

cout << *(*(mas + *i) + *j) << ' ';

}

}

system("pause");

return 0;




}Всё работает, только меня интересует вопрос: будет ли память в куче освобождена от *i и *j после завершения циклов? Если нет, то как её освободить? Спасибо.
Да программа там завершится, так что подотрет система твою память.
А так желательно убирать за собой: delete
KA
Kanjar Attokurov
68 786
Лучший ответ
массив в стеке, а итераторы в куче? что за бред.
#include <iostream>
==2609==
==2609== HEAP SUMMARY:
==2609== in use at exit: 44 bytes in 11 blocks
==2609== total heap usage: 11 allocs, 0 frees, 44 bytes allocated
==2609==
==2609== LEAK SUMMARY:
==2609== definitely lost: 44 bytes in 11 blocks
==2609== indirectly lost: 0 bytes in 0 blocks
==2609== possibly lost: 0 bytes in 0 blocks
==2609== still reachable: 0 bytes in 0 blocks
==2609== suppressed: 0 bytes in 0 blocks
==2609== Rerun with --leak-check=full to see details of leaked memory
Они же локальные и существуют только в цикле, в котором вызваны. Значит, наверное, они удаляются по завершению.
П. с. это всё домыслы, еслишо.
МО
Максим Орлов
22 076
Разумеется, память не будет освобождена по завершению циклов.

Память отводится в куче, поэтому уничтожится только при ЯВНОМ вызове delete [] или при завершении программы.
Даже если вы пытаетесь отвести память нулевого размера, диспетчер памяти отводит место под служебную информацию. Согласно стандарту, new(0) должен вернуть корректный указатель.
Сколько при этом реально будет отведено памяти, зависит от компилятора.

Каждый вызов (кроме последнего) int *j = new int(0) приводит к утечке памяти. Поскольку каждый следующий указатель будет на НОВОЕ место.

Похожие вопросы