9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
|
||||||||||||||||
1 | ||||||||||||||||
Утечка памяти и delete17.12.2011, 16:42. Показов 13729. Ответов 12
Метки нет (Все метки)
Вот накопились вопросы про утечки памяти.
1) Как проявляется утечка памяти? На многих сайтах написано что если не удалять указатели то память будет утекать, но как узнать что она утекла? Как боротся с тем чего не знаешь? Как я себе это понимаю: у меня есть цикличная программа которая выполняет некоторые действия и возвращается на первоначальную точку, ждём сигнала и потом снова что-то делает, и вот после каждого цыкла у меня память по чуть чуть увеличивается. Это и есть утечка? 2) Например уменя есть та же цыклическая программа
0
|
17.12.2011, 16:42 | |
Ответы с готовыми решениями:
12
Delete[] и утечка памяти Утечка памяти. new/delete. Всё как доктор прописал, но не работает delete[] *pointer vs. delete pointer и утечка памяти утечка памяти |
Каратель
|
|||||||||||
17.12.2011, 16:46 | 2 | ||||||||||
используем смарт указатели, контейнеры
используй правило: на каждый new должен быть свой delete на каждый new [] должен быть свой delete [] примеры:
0
|
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
|
||||||
17.12.2011, 23:19 [ТС] | 3 | |||||
но ведь не всегда указатели появляются от оператора new. Например
2) hdr тожеу казатель, очищать их так же? А примеры я не очень понял, мне интересно как правельно писать, а не как не нужно. Ещё очень хотелось бы услышать ответ на 1 вопрос, очень важен для дебага.
0
|
17.12.2011, 23:28 | 5 |
0
|
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
|||||||||||
18.12.2011, 00:43 | 7 | ||||||||||
OrmaJever, не всякий указатель нужно подчищать.
очищать нужно только ту память, что была выделена динамически на КУЧЕ ( с помощью new, malloc). также некоторые функции могут без нашего ведома выделять память и возвращать на нее указатель,в таком случае можно тоже очистить. ex. strdup.
1
|
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
|
||||||
18.12.2011, 18:35 [ТС] | 8 | |||||
OstapBender, Спасибо! Но если одни указатели нужно удалять а другие нет то как их различать?
Например есть некая функция которая возвращает указатель на char
Как думаете если бы я нашёл где это прочитать я бы спрашивал? Может я не так понял то что читал. Ну и всё таки один вопрос остался открытым, как узнать когда память утекла? Или вы сами то не знаете
0
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
|
18.12.2011, 18:40 | 9 |
OrmaJever
Под мат частью понимается книги. Возьмите книгу и там все будет объяснено и не будете по два дня тратить на один вопрос. За все это время, что вы потратили на вопрос, вы бы могли уже прочитать как минимум одну главу из книги и знать на много больше, чем узнаете, задав 1 вопрос. Советую книгу Харви М. Дейтел (H. M. Deitel), Пол Дж. Дейтел (P. J. Deitel) Как программировать на C++ 5ое полное издание.
1
|
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
|
18.12.2011, 19:00 | 10 |
всё просто. если используешь функцию уж будь добр прочитай про нее, а там и ясно станет.
а если сам пишешь функцию - так ты и сам знаешь че с ней делать. иногда никак. можно с помощью нестандартных дополнений. или узнаешь когда прога вылетит с критической ошибкой) вывод - писать всё с самого начала правильно. на каждый new свой delete и всё.
1
|
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
|
||||||
19.12.2011, 15:08 [ТС] | 11 | |||||
А хитрость то есть. Разве вы не знали что можно перегружать операторы new и delete ? Вчера в поисках метода борьбы с утечками нашёл просто божественую весч.
0
|
19.12.2011, 16:23 | 13 |
0
|
19.12.2011, 16:23 | |
19.12.2011, 16:23 | |
Помогаю со студенческими работами здесь
13
Утечка памяти? утечка памяти Утечка памяти Утечка памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |