Страница 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;
запутано как-то.. есть подозрение, что утечка все таки может произойти :D

Добавлено: Пт сен 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,
Утечка будет, если в этом окне прога вылетит ;-)
... и система с радостью сама прибъет все неосвобожденные прогой ресурсы :D

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

Добавлено: Пн окт 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, батенька.