Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
#1

Утечка памяти - C++

06.12.2012, 14:39. Просмотров 539. Ответов 8

Либо я себе мозг запудрила, либо помогите мне
есть у меня вектор
C++
1
vector<char*> names_variable;
дополняю его таким образом
C++
1
2
3
4
char* s = new char[11];
s[10] = '\0';
// код ...
names_variable.push_back(s);
и при этом не удаляю указатель s .. ибо в векторе останется пусто
удаляю вектор
C++
1
names_variable.clear();
но как выясняется память того, что содержалось в s так и осталась висеть в памяти..

Это получается, если есть вектор указателей, он не освобождает память? Или нужно это делать как-то по-другому? Или я вообще лабуду наделала?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2012, 14:39     Утечка памяти
Посмотрите здесь:

Утечка памяти - C++
Доброго времени суток. Написал оконное приложение. Столкнулся с проблемой - утекает память. Какие есть средства, чтобы определить,...

Утечка памяти - C++
Не могу понять как избежать утечки памяти в своей программе... привожу кусок в одном из мест где на мой взгляд она происходит... Array...

Утечка памяти?! - C++
Джесс Либерти и Дэвид Хорват &quot;Освой самостоятельно С++ за 24 часа&quot;, вырезка из листинга 15.4 (стр 233): Строка 26 - Утечка памяти?...

Утечка памяти - C++
В небольшой программе с использованием OpenCV происходит утечка памяти, с чем связана не понимаю, прошу помощи, спасибо! #include...

Утечка памяти - C++
Где я допустил ее(утечку)? #define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;string&gt; class...

Утечка памяти в - C++
Кто подскажет плиз. Тут у меня утечка памяти foreach (var file in xpsFiles) { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
06.12.2012, 14:42     Утечка памяти #2
Цитата Сообщение от Leomana Посмотреть сообщение
Это получается, если есть вектор указателей, он не освобождает память?
Вектор подчищает за собой, но не за Вами. Если Вы записываете в него указатели на выделенную в куче память, то потом Вам же её и удалять.
Память, выделенную для указателей он освободит, а вот то, что находится по этим указателям - Ваша головная боль.
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
06.12.2012, 14:45  [ТС]     Утечка памяти #3
ну если вектор у меня глобальный, а указатель s локальный.. то как мне поместить строку s, удалить ее, но при этом чтобы в векторе осталось строка?
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
06.12.2012, 14:53     Утечка памяти #4
Цитата Сообщение от Leomana Посмотреть сообщение
ну если вектор у меня глобальный, а указатель s локальный.. то как мне поместить строку s, удалить ее, но при этом чтобы в векторе осталось строка?
Выделяйте память под строку в динамической памяти, потом копию указателя на эту память записывайте в вектор. Перед удалением элемента вектора, освобождайте память, выделенную для строки. При удалении всего вектора - проходите по всем элементам и освобождайте память.

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vector>
std::vector<char*> v;
int main()
{
    
    while(true){
        char *p=new char[1024];
        v.push_back(p);
        //delete [] v[0]; //Без этого, память быстро кончится и программа "упадет"
        v.pop_back();
    }
    return 0;
}
prazuber
109 / 109 / 3
Регистрация: 29.04.2010
Сообщений: 240
06.12.2012, 14:54     Утечка памяти #5
Сама конструкция плоха. Вы уверены, что вам нужен именно std::vector<char*>? В большинстве случаев std::vector<std::string> замечательно подойдет, и никаких утечек памяти не будет.
gray_fox
What a waste!
1438 / 1167 / 61
Регистрация: 21.04.2012
Сообщений: 2,436
Завершенные тесты: 3
06.12.2012, 14:58     Утечка памяти #6
Или пользутесь умными указателями, если есть возможность.

Добавлено через 1 минуту
(Только не auto_ptr).
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
06.12.2012, 15:00  [ТС]     Утечка памяти #7
Цитата Сообщение от Croessmah Посмотреть сообщение
Выделяйте память под строку в динамической памяти, потом копию указателя на эту память записывайте в вектор. Перед удалением элемента вектора, освобождайте память, выделенную для строки. При удалении всего вектора - проходите по всем элементам и освобождайте память.

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vector>
std::vector<char*> v;
int main()
{
    
    while(true){
        char *p=new char[1024];
        v.push_back(p);
        //delete [] v[0]; //Без этого, память быстро кончится и программа "упадет"
        v.pop_back();
    }
    return 0;
}
ну так в Вашем коде p не удаляется...
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
06.12.2012, 15:04     Утечка памяти #8
Цитата Сообщение от Leomana Посмотреть сообщение
ну так в Вашем коде p не удаляется...
Вот именно! И операция v.pop_back() тоже не освобождает память, выделенную для строки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2012, 15:09     Утечка памяти
Еще ссылки по теме:

Утечка памяти - C++
Доброго времени суток, форумчане. Помогите справиться с утечкой памяти, не понятно где зараза засела. Это класс представления числа в СОК...

Утечка памяти? - C++
В Лафоре такой код: #include &lt;iostream&gt; using namespace std; /////////////////////////////////////////////////////////// class...

утечка памяти - C++
Может кто-то проверить есть ли здесь утечка памяти? Мне почему-то кажется что есть. В задачи нужно когда пользователь сделал операции...

Утечка памяти - C++
Привет! написал программму, и не могу разобраться где утекает память. помогите кто сможет. Задание #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
06.12.2012, 15:09  [ТС]     Утечка памяти #9
Цитата Сообщение от PraZuBeR Посмотреть сообщение
Сама конструкция плоха. Вы уверены, что вам нужен именно std::vector<char*>? В большинстве случаев std::vector<std::string> замечательно подойдет, и никаких утечек памяти не будет.
к сожалению сначала не задалось со string по глупости, и теперь вся программа состоит из char*... и переделывать нет резона)
Yandex
Объявления
06.12.2012, 15:09     Утечка памяти
Ответ Создать тему
Опции темы

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