Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
1

Очищается ли вся динамическая память по завершению программы?

24.04.2015, 22:37. Просмотров 3167. Ответов 25
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<locale.h>
 
const int Max = 100;
 
void main()
{
    setlocale(LC_ALL,"rus");
    int counter=0; 
    char *myString;
    myString =(char*) malloc( sizeof(*myString) * Max ); 
    printf("Введите строку\n");
    gets(myString);
    myString = strtok(myString, " ");
    while(myString != NULL)
   {
       if(strlen(myString) == 5)
      {
         counter ++;
      }
       myString = strtok(NULL, " ");
   }
printf("Количество:%d\n",counter);
free(myString);
}
Очищается ли вся динамическая память по завершению программы?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2015, 22:37
Ответы с готовыми решениями:

Не очищается динамическая память, codeblocks
При каждой новой прогонке сумма выдается все больше и больше. если что, само задание - в одномерном...

Правильно ли очищается память?
сть программа которая работает с динамическим массивом. работает она так: int** a = new int*; ...

Динамические массивы: очищается ли память?
Здравствуйте. Подскажите, пожалуйста, по поводу динамических массивов. Допустим, есть вот такой...

Беда с курсором. Видимо, не очищается память
Есть у меня такой курсор: set @prodName = (select Product_name from inserted) set @prodQuant =...

25
lss
934 / 862 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
24.04.2015, 22:42 2
Цитата Сообщение от artart96 Посмотреть сообщение
Очищается ли вся динамическая память по завершению программы?
Нет.
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
24.04.2015, 22:43  [ТС] 3
Цитата Сообщение от lss Посмотреть сообщение
Нет.
Почему нет?Что необходимо добавить?
0
lss
934 / 862 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
24.04.2015, 22:46 4
Цитата Сообщение от artart96 Посмотреть сообщение
Почему нет?
Потому, что Visual Leak Detector показывает утечку.
1
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
24.04.2015, 22:49  [ТС] 5
Можете объяснить почему?И что необходимо дописать?
0
lss
934 / 862 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
24.04.2015, 22:54 6
Лучший ответ Сообщение было отмечено artart96 как решение

Решение

Цитата Сообщение от artart96 Посмотреть сообщение
Можете объяснить почему?И что необходимо дописать?
Выделяешь память под указатель, потом меняешь его значение. Должна быть ошибка при освобождении, но, у тебя, он в конце равен NULL, поэтому ошибки, при особождении памяти, нет, но и память не освобождается.
1
13472 / 7135 / 1712
Регистрация: 30.01.2014
Сообщений: 11,926
24.04.2015, 22:55 7
Лучший ответ Сообщение было отмечено artart96 как решение

Решение

artart96, указатель, который ты передаешь в free, должен быть тем же самым, что вернула malloc. У тебя это не так.
1
lss
934 / 862 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
24.04.2015, 22:56 8
Лучший ответ Сообщение было отмечено artart96 как решение

Решение

После выделения памяти, сохрани значение указателя, вот это значение и используй при освобождении памяти.
1
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
24.04.2015, 23:05  [ТС] 9
Вот так правильно будет?
0
Миниатюры
Очищается ли вся динамическая память по завершению программы?  
3168 / 1927 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
24.04.2015, 23:08 10
Цитата Сообщение от artart96 Посмотреть сообщение
Очищается ли вся динамическая память по завершению программы?
Да.

"Хороший стиль", однако требует корректного освобождения ресурсов в любой ситуации.
0
lss
934 / 862 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
24.04.2015, 23:09 11
Цитата Сообщение от artart96 Посмотреть сообщение
Вот так правильно будет?
Visual Leak Detector не доверяешь?
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
24.04.2015, 23:11  [ТС] 12
Цитата Сообщение от lss Посмотреть сообщение
Visual Leak Detector не доверяешь?
Доверяю, спасибо
0
lss
934 / 862 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
24.04.2015, 23:12 13
Цитата Сообщение от gazlan Посмотреть сообщение
Да.
artart96, поясни - тебя интересовало есть ли утечки памяти в коде, или очищается ли вся динамическая память по завершению программы?
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
24.04.2015, 23:14  [ТС] 14
Цитата Сообщение от lss Посмотреть сообщение
artart96, поясни - тебя интересовало есть ли утечки памяти в коде, или очищается ли вся динамическая память по завершению программы?
Очищение динамической памяти по завершению программы.
0
lss
934 / 862 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
24.04.2015, 23:21 15
Цитата Сообщение от artart96 Посмотреть сообщение
Очищение динамической памяти по завершению программы.
А зачем тогда Visual Leak Detector? При завершении программы, память в любом случае очистится.

Добавлено через 4 минуты
Но к этой очистке, твоя программа, уже не имеет отношения.
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
24.04.2015, 23:21  [ТС] 16
Цитата Сообщение от lss Посмотреть сообщение
А зачем тогда Visual Leak Detector? При завершении программы, память в любом случае очистится.
Как я понимаю, что при завершение программы происходит автоматическое очищение статической памяти, если мы используем динамическую память и не очищаем её при выходе, то происходит утечка памяти.Visual Leak Detector чисто для проверки, если нет утечки, значит при завершении программы динамическая память была высвобождена правильно, так?
0
lss
934 / 862 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
24.04.2015, 23:36 17
Цитата Сообщение от artart96 Посмотреть сообщение
так?
Нет.

Добавлено через 13 минут
Ты говоришь об утечках памяти: это когда память была выделена в коде и не освобождена до выхода из кода (будем считать - до выхода из main()). Я почему и спросил, что тебя интересовало: утечки памяти или
Цитата Сообщение от artart96 Посмотреть сообщение
Очищается ли вся динамическая память по завершению программы?
Я ответил про утечки, gazlan ответил про очищение динамической памяти ПО завершению программы, т.е. когда программа завершила работу. Когда программа уже завершила работу, то ОС освобождает всю выделенную ей память.
1
13472 / 7135 / 1712
Регистрация: 30.01.2014
Сообщений: 11,926
24.04.2015, 23:41 18
Цитата Сообщение от lss Посмотреть сообщение
Когда программа уже завершила работу, то ОС освобождает всю выделенную ей память.
artart96, не все ОС так делают.
Кроме того, в динамических объектах могут быть захвачены другие ресурсы, которые без вызова деструкторов не будут отпущены, и это создаст проблемы даже в ОС с памперсами.
2
2818 / 1628 / 252
Регистрация: 03.12.2007
Сообщений: 4,223
25.04.2015, 11:42 19
Даже если это одна только память без других ресурсов, она так через недельку работы может кончиться.
0
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.04.2015, 12:15 20
Цитата Сообщение от DrOffset Посмотреть сообщение
не все ОС так делают.
Какие не делают? Нашел в интернетах косвенное упоминание PalmOS только. Современные, вроде как все, возвращают память.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2015, 12:15

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Cpp. Как очищается память в функциях?
Я привык, что чисткой памяти занимается GC. А тут надо написать библиотеку на Cpp. От сюда базовые...

Не очищается память при завершении потока
Добрый день уважаемые форумчане. Из главного потока создаю поток который работает в цикле while...

Выполнение другой программы по завершению основной программы
Доброго времени суток форумчане. Делаю алгоритм для обновления программы. скачиваю обновления с FTP...

Почему не очищается память после очистки List а?
Привет. Есть такой код: static void Main(string args) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.