Страница 1 из 2
Проверка на утечку памяти в Builder как?
Добавлено: Пт сен 22, 2006 8:29
Borr
Как в Builder проверить течет память или нет
Суть в следующем в первом модуле есть глобальная переменная char *t.
Во втором модуле я ее определяю Form1->t = new char[str.Length()];
Потом при закрытии модуля (фрмы) 1 я удаляю эту глобальную переменную delete t;
Будет ли у меня течь память и как этот избежать в данной ситуации?
Добавлено: Пт сен 22, 2006 8:31
Borr
Пардо немного не так
во втором модуле
char *t = new char[str.Length()+1];
// а уже потом тут же но чуть позже
Form1->t = t;
Добавлено: Пт сен 22, 2006 11:11
Hank
Borr,
Как в Builder проверить течет память или нет
в Делфи2006 версии совершенно новый менеджер памяти, в котором можно включить проверку на утечки памяти RegisterMemoryLeak или что то в этом роде, насчет билдера - не в курсе.
ак же советую утилиту MemProf.
Во втором модуле я ее определяю Form1->t = new char[str.Length()];
Потом при закрытии модуля (фрмы) 1 я удаляю эту глобальную переменную delete t;
запутано как-то.. есть подозрение, что утечка все таки может произойти

Добавлено: Пт сен 22, 2006 12:04
Borr
MemProf? а ссылочку
Добавлено: Пт сен 22, 2006 14:24
Hank
Добавлено: Пт сен 22, 2006 16:51
Borr
Спасибо MemProof не MemProf
Добавлено: Сб сен 23, 2006 0:50
Hank
Borr,
а.. точно )
Добавлено: Сб сен 23, 2006 13:19
_korvin81
утечки небудет)
Добавлено: Вс сен 24, 2006 9:07
Borr
Так играться с указателями плохо. В С++ рекомендуют (это я в уважаемой литературе нашел + уважаемые люди подсказали) где выделил память с помощью new там же делай и delete. А для таких случаев как этот лутше создавать классы.
В догонку ко всему на такую передачу указателей как я сделал CodeGuard мотериться - раздражает. Но память и правда освобождаеться я проверял, но при этом код превращаеться в лабиринт

бек.
Добавлено: Пт сен 29, 2006 22:01
tAZAR
Borr писал(а): помощью new там же делай и delete. А для таких случаев как этот лутше создавать классы.
не обязательно - под класс или его члены ты ведь тоже память выделять будешь
утечки в данном случае не будет, если все пути при выходе из окна ведут к вызову события закрытия формы. Утечка будет, если в этом окне прога вылетит

Все там нормально - не переживай.
Добавлено: Пт сен 29, 2006 22:39
Hank
tAZAR,
Утечка будет, если в этом окне прога вылетит

... и система с радостью сама прибъет все неосвобожденные прогой ресурсы

Добавлено: Вс окт 01, 2006 18:59
_korvin81
Eraser,
+1

Добавлено: Пн окт 02, 2006 7:10
Borr
... и система с радостью сама прибъет все неосвобожденные прогой ресурсы Very Happy
Это не наш метод! С классами намного проще вышло - не нужно передавать неизвестно куда указатели.
а если MDI приложение и new делаеш не для текущей формы а для главной (кнопочка на ToolBar'e или Tab на TabControl, для управления текущей формой) и вот тут аксес виолятион и задерет (текущая формочка то закрывается, а главная остается).
Добавлено: Вт окт 03, 2006 11:34
JokerR
во-первых:
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];
вектор сам освободит память когда надо.
Добавлено: Вт окт 10, 2006 0:30
tAZAR
Eraser писал(а):... и система с радостью сама прибъет все неосвобожденные прогой ресурсы
гм. а что, у нас в BC++ Garbage Collector появился ?

Это каким, простите, хр...
Eraser, уж извини - но это тебе не Delphi и не VB. Это - C++. Выделил память - будь добр, удали. Иначе - leak цто пудов. гм. -1, батенька.