Привет народ. Короче написал такую штуку: #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 после завершения циклов? Если нет, то как её освободить? Спасибо.
Другие языки программирования и технологии
Освобождение памяти C++
Да программа там завершится, так что подотрет система твою память.
А так желательно убирать за собой: delete
А так желательно убирать за собой: delete
массив в стеке, а итераторы в куче? что за бред.
#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
#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
Они же локальные и существуют только в цикле, в котором вызваны. Значит, наверное, они удаляются по завершению.
П. с. это всё домыслы, еслишо.
П. с. это всё домыслы, еслишо.
Разумеется, память не будет освобождена по завершению циклов.
Память отводится в куче, поэтому уничтожится только при ЯВНОМ вызове delete [] или при завершении программы.
Даже если вы пытаетесь отвести память нулевого размера, диспетчер памяти отводит место под служебную информацию. Согласно стандарту, new(0) должен вернуть корректный указатель.
Сколько при этом реально будет отведено памяти, зависит от компилятора.
Каждый вызов (кроме последнего) int *j = new int(0) приводит к утечке памяти. Поскольку каждый следующий указатель будет на НОВОЕ место.
Память отводится в куче, поэтому уничтожится только при ЯВНОМ вызове delete [] или при завершении программы.
Даже если вы пытаетесь отвести память нулевого размера, диспетчер памяти отводит место под служебную информацию. Согласно стандарту, new(0) должен вернуть корректный указатель.
Сколько при этом реально будет отведено памяти, зависит от компилятора.
Каждый вызов (кроме последнего) int *j = new int(0) приводит к утечке памяти. Поскольку каждый следующий указатель будет на НОВОЕ место.
Похожие вопросы
- c++ new\delete: смысл выделения и освобождение памяти для озу из самой же озу?
- Напишите пожалуйста примеры функций выделения памяти и освобождения памяти (с аргументами) в С++ ?
- люди помогите как увеличить память на диске C
- Подскажите пожалуйста, почему уменьшается память на дисках C и D
- требуется помощь специалистов. Ребята что мне сделать с компьтером чтобы объединить память диска C и D
- Выделение памяти в C
- Удаляю ненужные программы с диска C, остается памяти 100мб. комп поработает пол часа память заканчивается, хотя ничего..
- Какие манипуляции с памятью можно производить в C и C++? В каких случаюх это необходимо?
- C++ :Разработать пользовательскую библиотеку для работы с односвязным списком (использовать динамическую память).
- C++ Объясните пож. на доступном языке про спецификаторы класса памяти. В инете и в книгах слишком заумно. Продолж ниже.