Как в Builder проверить течет память или нет
Суть в следующем в первом модуле есть глобальная переменная char *t.
Во втором модуле я ее определяю Form1->t = new char[str.Length()];
Потом при закрытии модуля (фрмы) 1 я удаляю эту глобальную переменную delete t;
Будет ли у меня течь память и как этот избежать в данной ситуации?
- Borr
- Частый гость
- Сообщения: 338
- Зарегистрирован: Ср сен 15, 2004 17:14
- Откуда: Шахты
- Контактная информация:
Проверка на утечку памяти в Builder как?
Стой там, иди сюда
Borr,
ак же советую утилиту MemProf.
в Делфи2006 версии совершенно новый менеджер памяти, в котором можно включить проверку на утечки памяти RegisterMemoryLeak или что то в этом роде, насчет билдера - не в курсе.Как в Builder проверить течет память или нет
ак же советую утилиту MemProf.
запутано как-то.. есть подозрение, что утечка все таки может произойтиВо втором модуле я ее определяю Form1->t = new char[str.Length()];
Потом при закрытии модуля (фрмы) 1 я удаляю эту глобальную переменную delete t;
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )
Люблю и поработать, особенно поспать )
http://www.google.ru/search?hl=ru&q=Mem ... %D0%BA&lr=
первая ссылка
первая ссылка
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )
Люблю и поработать, особенно поспать )
- Borr
- Частый гость
- Сообщения: 338
- Зарегистрирован: Ср сен 15, 2004 17:14
- Откуда: Шахты
- Контактная информация:
Так играться с указателями плохо. В С++ рекомендуют (это я в уважаемой литературе нашел + уважаемые люди подсказали) где выделил память с помощью new там же делай и delete. А для таких случаев как этот лутше создавать классы.
В догонку ко всему на такую передачу указателей как я сделал CodeGuard мотериться - раздражает. Но память и правда освобождаеться я проверял, но при этом код превращаеться в лабиринт бек.
В догонку ко всему на такую передачу указателей как я сделал CodeGuard мотериться - раздражает. Но память и правда освобождаеться я проверял, но при этом код превращаеться в лабиринт бек.
Стой там, иди сюда
не обязательно - под класс или его члены ты ведь тоже память выделять будешьBorr писал(а): помощью new там же делай и delete. А для таких случаев как этот лутше создавать классы.
утечки в данном случае не будет, если все пути при выходе из окна ведут к вызову события закрытия формы. Утечка будет, если в этом окне прога вылетит Все там нормально - не переживай.
- Borr
- Частый гость
- Сообщения: 338
- Зарегистрирован: Ср сен 15, 2004 17:14
- Откуда: Шахты
- Контактная информация:
Это не наш метод! С классами намного проще вышло - не нужно передавать неизвестно куда указатели.... и система с радостью сама прибъет все неосвобожденные прогой ресурсы Very Happy
а если MDI приложение и new делаеш не для текущей формы а для главной (кнопочка на ToolBar'e или Tab на TabControl, для управления текущей формой) и вот тут аксес виолятион и задерет (текущая формочка то закрывается, а главная остается).
Стой там, иди сюда
- JokerR
- Новичок
- Сообщения: 86
- Зарегистрирован: Чт сен 15, 2005 1:03
- Откуда: Шахты
- Контактная информация:
во-первых:
new blabla <-> delete blabla;
new blabla[size] <-> delete [] blabla;
Во-вторых, когда я вижу явный delete мне хочется обрубить программисту пальцы. Есть контейнер std::vector<T> - удовлетворяет 99% потребностей в массивах. Именно здесь его и нужно использовать.
std::vector<char> t;
//где-то в коде:
t.resize(str.length());
// Form1->t это char *
Form1->t = &t[0];
вектор сам освободит память когда надо.
new blabla <-> delete blabla;
new blabla[size] <-> delete [] blabla;
Во-вторых, когда я вижу явный delete мне хочется обрубить программисту пальцы. Есть контейнер std::vector<T> - удовлетворяет 99% потребностей в массивах. Именно здесь его и нужно использовать.
std::vector<char> t;
//где-то в коде:
t.resize(str.length());
// Form1->t это char *
Form1->t = &t[0];
вектор сам освободит память когда надо.
гм. а что, у нас в BC++ Garbage Collector появился ? Это каким, простите, хр...Eraser писал(а):... и система с радостью сама прибъет все неосвобожденные прогой ресурсы
Eraser, уж извини - но это тебе не Delphi и не VB. Это - C++. Выделил память - будь добр, удали. Иначе - leak цто пудов. гм. -1, батенька.