Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
 Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free  [new]
PrimaryPro
Member

Откуда:
Сообщений: 138
Добрый день.

Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free:

        TADOQuery *ADOQuery2=new TADOQuery(NULL);
        //---- Код
        ADOQuery2->Close();
        ADOQuery2->Free(); // delete ADOQuery2?
13 апр 20, 09:24    [22115197]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free  [new]
Dima T
Member

Откуда:
Сообщений: 14727
С TADOQuery не сталкивался, но стандартный подход в С++ такой: если объект создается явно (new) то и удалять его надо явно (delete).

Надо ли дополнительно вызывать метод Free() - не знаю, это надо смотреть документацию.
13 апр 20, 10:30    [22115214]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free  [new]
PrimaryPro
Member

Откуда:
Сообщений: 138
Dima T

Спасибо.

В документации касательно объекта TObject сказано:

автор
Note: In C++ code, do not use Free to destroy an object. Use the delete keyword.


Но в программе у меня предыдущий программист использовал Free. Всё бы ничего, но объем потребляемой памяти разрастается сильно.
13 апр 20, 11:38    [22115265]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free  [new]
Dima T
Member

Откуда:
Сообщений: 14727
PrimaryPro
Но в программе у меня предыдущий программист использовал Free. Всё бы ничего, но объем потребляемой памяти разрастается сильно.

Это называется утечкой памяти. Объет не удалялся и продолжал занимать память до завершения приложения.
13 апр 20, 12:49    [22115329]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free  [new]
PrimaryPro
Member

Откуда:
Сообщений: 138
Dima T

Да, утечка памяти. Вроде везде понаставил try .... __finally delete obj

но все равно не помогает. Как вычислить, где происходит утечка? Программа начинает с 3МБ и за час увеличивается примерно на 25-30 МБ
13 апр 20, 13:15    [22115345]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free  [new]
PrimaryPro
Member

Откуда:
Сообщений: 138
Подскажите, нужно ли высвобождать память для tProc в нижеприведенном коде после старта потока?

        TimerCheck->Enabled=false;
        TMonDirThread *tProc;
        tProc = new TMonDirThread(true,
            0, //soket
            Status,               //zapros
            "",                 //type
            "",
            "","","",""
        );
13 апр 20, 13:35    [22115362]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49957
PrimaryPro
Как вычислить, где происходит утечка?

FastMM, DrMemory, штатный CodeGuard.

Сообщение было отредактировано: 13 апр 20, 13:35
13 апр 20, 13:36    [22115363]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free  [new]
PrimaryPro
Member

Откуда:
Сообщений: 138
Если честно, я в С++ и в Builder новичок. Если расскажете немножко поподробнее буду благодарен безмерно
13 апр 20, 14:00    [22115386]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49957

Значит учись, гугли, читай документацию. Именно так новички становятся специалистами.

Posted via ActualForum NNTP Server 1.5

13 апр 20, 14:04    [22115387]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free  [new]
PrimaryPro
Member

Откуда:
Сообщений: 138
В программе имеется фрагмент:

    char * tmptxt = EncMSG.c_str();


Но высвобождения в виде free(tmptxt) нет.

Может ли быть это одной из причин утечки памяти? Стоит ли добавить free(tmptxt)?
13 апр 20, 14:05    [22115388]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free  [new]
Dima T
Member

Откуда:
Сообщений: 14727
PrimaryPro
В программе имеется фрагмент:

    char * tmptxt = EncMSG.c_str();


Но высвобождения в виде free(tmptxt) нет.

Может ли быть это одной из причин утечки памяти? Стоит ли добавить free(tmptxt)?

Нет. Тут new нет, поэтому освобождать ничего не надо, все происходит внутри EncMSG.

Боюсь тебе пока рано заниматься такими сложными вопросами как поиск утечек памяти. Для начала просто поизучай основы С++
13 апр 20, 14:11    [22115398]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free  [new]
PrimaryPro
Member

Откуда:
Сообщений: 138
Я вообще-то дельфист). А с С++ занимаюсь так как некому, да и интересно тоже
13 апр 20, 14:18    [22115402]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49957
PrimaryPro
Стоит ли добавить free(tmptxt)?

Попробуй. Отладка краша, который будет результатом этого, займёт у тебя пару дней.

PrimaryPro
Я вообще-то дельфист).

В Дельфи работа с памятью ничем не отличается от С/С++.
Модератор: Редактировано


Сообщение было отредактировано: 14 апр 20, 10:51
13 апр 20, 14:32    [22115424]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста, как правильно удалять объект TADOQuery, с помощью delete или free  [new]
PrimaryPro
Member

Откуда:
Сообщений: 138
Спасибо. Буду искать дальше
13 апр 20, 14:38    [22115429]     Ответить | Цитировать Сообщить модератору
Все форумы / C++ Ответить