Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Acrobat от Сентябрь 19, 2016, 17:26



Название: Утечка памяти QByteArray addBindValue
Отправлено: Acrobat от Сентябрь 19, 2016, 17:26
Доброго времени суток. Не могу победить утечку памяти.
Выделяю буфер buf[] с помощью new (buf[2] статический массив указателей)
Заполняю его. После

for(int x = 0; x < 2; ++x)
{
     delete[] buf
  • ;
    init(buf
  • );
    query.addBindValue(QByteArray(buf
  • , size));    
}

query.exec();


Не могу понять где утекает память. Вообще, как правильно очистить QByteArray, если инициализирую его своим буфером char * buf
  •  ?
Утечка как то связана с buf и QByteArray, т.к. комментирование решает проблему.


Название: Re: Утечка памяти QByteArray addBindValue
Отправлено: qate от Сентябрь 20, 2016, 09:11
откуда информация что утекает память ?
код оформлен безобразно


Название: Re: Утечка памяти QByteArray addBindValue
Отправлено: __Heaven__ от Сентябрь 20, 2016, 09:21

Код
C++ (Qt)
for(int x = 0; x < 2; ++x)
{
   delete[] buf[x];
   init(buf[x]);
   query.addBindValue(QByteArray(buf[x], size));
}
query.exec();
 
Дайте больше кода и пользуйтесь тэгами.
Покажите как присваиваются значения buf, само объявление buf.


Название: Re: Утечка памяти QByteArray addBindValue
Отправлено: Acrobat от Сентябрь 20, 2016, 12:49
Всем спасибо, разобрался самостоятельно. Не подскажите почему приложение собранное, как debug работает гораздо быстрее, чем release?


Название: Re: Утечка памяти QByteArray addBindValue
Отправлено: qate от Сентябрь 20, 2016, 14:49
Не подскажите почему приложение собранное, как debug работает гораздо быстрее, чем release?

в слове debug меньше букв - это всё что можно сказать по полученной информации


Название: Re: Утечка памяти QByteArray addBindValue
Отправлено: __Heaven__ от Сентябрь 20, 2016, 15:25
Лог сборки хотя бы выложите для обоих профилей


Название: Re: Утечка памяти QByteArray addBindValue
Отправлено: Acrobat от Сентябрь 21, 2016, 14:34
debug для myapp:   
cl -c -nologo -Zm200 -Zc:wchar_t- -Zi -MDd -GR -EHsc -W3 -w34100 -w34189 -DUNICODE -DWIN32 -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I"c:\Qt\4.8.6\include\QtCore" -I"c:\Qt\4.8.6\include\QtGui" -I"c:\Qt\4.8.6\include\QtSql" -I"c:\Qt\4.8.6\include" -I"..\myapp\ibase\include" -I"c:\Qt\4.8.6\include\ActiveQt" -I"debug" -I"." -I"..\myapp" -I"." -I"c:\Qt\4.8.6\mkspecs\win32-msvc2010" -Fodebug\ @C:\Users\COMP\AppData\Local\Temp\nm3950.tmp
moc_mainwindow.cpp
qrc_res.cpp
Создание кода...
   link /LIBPATH:"c:\Qt\4.8.6\lib" /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /MANIFEST /MANIFESTFILE:"debug\myapp.intermediate.manifest" /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /OUT:debug\myapp.exe @C:\Users\COMP\AppData\Local\Temp\nm3D38.tmp
   mt.exe -nologo -manifest "debug\myapp.intermediate.manifest" -outputresource:debug\myapp.exe;1

relese для myapp:
   cl -c -nologo -Zm200 -Zc:wchar_t- -O2 -MD -GR -EHsc -W3 -w34100 -w34189 -DUNICODE -DWIN32 -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DNDEBUG -I"c:\Qt\4.8.6\include\QtCore" -I"c:\Qt\4.8.6\include\QtGui" -I"c:\Qt\4.8.6\include\QtSql" -I"c:\Qt\4.8.6\include" -I"..\myapp\ibase\include" -I"c:\Qt\4.8.6\include\ActiveQt" -I"release" -I"." -I"..\myapp" -I"." -I"c:\Qt\4.8.6\mkspecs\win32-msvc2010" -Forelease\ @C:\Users\COMP\AppData\Local\Temp\nmE4BB.tmp
moc_mainwindow.cpp
qrc_res.cpp
Создание кода...
   link /LIBPATH:"c:\Qt\4.8.6\lib" /NOLOGO /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO /MANIFEST /MANIFESTFILE:"release\myapp.intermediate.manifest" /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /OUT:release\myapp.exe @C:\Users\COMP\AppData\Local\Temp\nmE78A.tmp
   mt.exe -nologo -manifest "release\myapp.intermediate.manifest" -outputresource:release\myapp.exe;1


Название: Re: Утечка памяти QByteArray addBindValue
Отправлено: __Heaven__ от Сентябрь 21, 2016, 15:16
debug работает гораздо быстрее, чем release?
А на основании чего утверждаете?


Название: Re: Утечка памяти QByteArray addBindValue
Отправлено: Acrobat от Сентябрь 21, 2016, 15:21
По прогресс бару видно. Вообще по процессу обработки БД. В дебаг гораздо быстрее всё.


Название: Re: Утечка памяти QByteArray addBindValue
Отправлено: __Heaven__ от Сентябрь 21, 2016, 16:15
А под обработкой БД что подразумеваете?


Название: Re: Утечка памяти QByteArray addBindValue
Отправлено: Acrobat от Сентябрь 22, 2016, 12:17
Запрос к одной (SELECT) и запись в другую новую (INSERT). Может проблема быть связана с тем, что я использую QtConcurent и обрабатываю БД в потоке запущенном с помощью QtConcurent ?


Название: Re: Утечка памяти QByteArray addBindValue
Отправлено: __Heaven__ от Сентябрь 22, 2016, 16:10
По идее не должно быть. Можно попробовать перетереть файл user.pro, но не уверен, что это поможет.