Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2011, 20:16   #1
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию Утечки памяти

Здравствуйте, уважаемые господа.

Недавно заметил через диспетчер задач, что в моей программе присутствуют утечки памяти.

Кол-во операторов new совпадает с delete, а new[] — с delete[], malloc не использую.

Из-за чего ещё они могут возникать?

К сожалению, сейчас crtdbg.h ни о чём не сообщает.

Заранее благодарю за возможные ответы.
YourLastSong вне форума Ответить с цитированием
Старый 02.11.2011, 20:21   #2
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
Кол-во операторов new совпадает с delete, а new[] — с delete[]
Еще ни о чем не говорит. Эти операторы могут оказаться там, где никогда не будут вызваны. Тривиальный пример:
Код:
int *p = new int(5);
if (0) delete p;
Количество new и delete совпадает, да.
Делай логи. Самый простой способ найти утечки.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 02.11.2011, 20:24   #3
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Нет, вызываются они там, где будут выполняться постоянно.
YourLastSong вне форума Ответить с цитированием
Старый 02.11.2011, 20:32   #4
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Кстати, я тоже начал использовать new - delete, поэтому резонный вопрос:

Как распознать утечку памяти?
Из-за чего она может появиться, если delete совпадает с new?
L6go1as вне форума Ответить с цитированием
Старый 02.11.2011, 20:34   #5
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
Сообщение от YourLastSong Посмотреть сообщение
Нет, вызываются они там, где будут выполняться постоянно.
Как вы можете быть в этом уверены? А если где-то выбрасывается исключение? А функция не вызывается? А если конструктор копирования не везде переопределили, где есть члены-указатели?
Или вот пример, где количество new и delete не совпадает, но утечек нет:
Код:
class X
{
int* p;
public:
  X() : p(0) {p = new int;}
  X(const X&right) : p(0) {p = new int(right.p);}
  X& operator=(const X&right) {delete p; p = new int(right.p); return (*this);}
  ~X(){delete p;}
};
Как видите, три раза new, два раза delete, а утечек при использовании класса не будет.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 02.11.2011, 20:37   #6
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Цитата:
А если где-то выбрасывается исключение?
Нет, иначе я бы увидел сообщение об этом.

Цитата:
А функция не вызывается?
Вызывается, это видно из работы программы после этого.

Цитата:
А если конструктор копирования не везде переопределили, где есть члены-указатели?
Их нет просто сейчас у меня.
YourLastSong вне форума Ответить с цитированием
Старый 02.11.2011, 20:37   #7
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
Сообщение от L6go1as Посмотреть сообщение
Как распознать утечку памяти?
Выследить.
Цитата:
Сообщение от L6go1as Посмотреть сообщение
Из-за чего она может появиться, если delete совпадает с new?
Из-за недостатков императивного стиля программирования - вы очень редко можете гарантировать, что какая-то ветвь кода будет работать при любых условиях и в нужное время.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 02.11.2011, 20:39   #8
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
Их нет просто сейчас у меня.
Нет ни одного класса с членами-указателями, но используется new и delete?
Сложно представить, что такое вы пишете и где могут быть утечки. Код сильно большой или показать можете?
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 02.11.2011, 20:40   #9
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Сtrl Посмотреть сообщение
Нет ни одного класса с членами-указателями, но используется new и delete?
Да, просто использую их вместо malloc.

Цитата:
Код сильно большой или показать можете?
Да, очень большой.
YourLastSong вне форума Ответить с цитированием
Старый 02.11.2011, 20:41   #10
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от Сtrl Посмотреть сообщение
Выследить.
А каким образом? Путем исследования кода или можно как ни будь посмотреть (скажем программкой какой ни будь) ?
L6go1as вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Утечки памяти volod3000 Общие вопросы Delphi 0 22.06.2011 00:08
утечки памяти KOLANICH Общие вопросы C/C++ 3 30.01.2011 00:15
Утечки памяти. c++ learner Общие вопросы C/C++ 3 29.11.2010 15:01
Достали утечки памяти Порфирий Общие вопросы C/C++ 4 22.12.2009 11:32
InterBase 7.1 - утечки памяти. pushkin42 БД в Delphi 2 21.03.2007 16:15