12 / 11 / 0
Регистрация: 29.11.2009
Сообщений: 186
|
|
1 | |
Вопрос о динамическом выделении памяти19.04.2010, 17:36. Просмотров 548. Ответов 4
Метки нет Все метки)
(
Доброго времени суток всем. у меня вопрос к работе следующего кода:
delete[] values; // Удаляем массив из кучи values = temp; // присваиваем адресу адрес нового массива(он тоже в куче находится) temp = 0; // Сбрасываем указатель на массив,который находится в куче мне вот что кажется неестественным: -когда мы удаляем массив из кучи почему на него остаётся указатель?(мы ему присваиваем значение указателя на другой массив) -когда мы присваиваем указателю temp ноль - ведь мы по сути приводим этим к утечке памяти? поскольку массив так и находится в куче,а указатель на него мы сбросили - мы к нему теперь не можем обратиться,а память он занимает? или я не правильно что-то понимаю? заранее благодарю за ответы.
0
|
|
19.04.2010, 17:36 | |
Вопрос о динамическом выделении памяти для строки Ошибка на динамическом выделении памяти Немного о динамическом выделении памяти ... Ошибка при динамическом выделении памяти |
|
19.04.2010, 17:40 | 2 |
память помечается как свободная, но не очищается
если где то сохранили адрес памяти до присвоения 0, то всегда можно будет по этому адресу отыскать блок памяти и корректно его удалить, к утечкам это не приведет
1
|
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
|
|
19.04.2010, 17:58 | 3 |
int *p = new int[10];
int mas[123]; p = 0 или p = mas; // утечка, обратится не можем, удалить не можем, будет занимать память, пока не выйдем из процесса.
1
|
12 / 11 / 0
Регистрация: 29.11.2009
Сообщений: 186
|
|
20.04.2010, 08:56 [ТС] | 4 |
0
|
4849 / 3270 / 466
Регистрация: 10.12.2008
Сообщений: 10,569
|
|
20.04.2010, 09:40 | 5 |
смысл delete в том, чтобы сделать память снова доступной для new
Добавлено через 12 минут как в K&R2 написано про malloc() и free(): при первом вызове malloc() с помощью системного вызова, обращаясь к системе, запрашивает большой кусок памяти, отрезает от него часть и возвращает указатель на начало (оставшуюся часть добавляет в список свободной памяти), при последующих вызовах, она от этого же куска отрезает ещё часть и возвращает указатель на начало (оставшуюся часть добавляет в список свободной памяти); когда этого куска не хвататает, malloc() делает снова запрос к операционной системе, и добавляет ещё один большой кусок к первому куску (добавляет его в список свободной памяти) free() возвращает отрезанный кусок в список свободных кусков (если нужно, склеивает соседние свободные узлы списка в один узел), malloc() потом может выбрать любой узел подходящего размера (разделит его, конечно, точно)
1
|
20.04.2010, 09:40 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. Ошибка при динамическом выделении памяти Выдаёт ошибку при динамическом выделении памяти
Выравнивание при динамическом выделении памяти под массив Использование конструктора базового класса при динамическом выделении памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |