Большие утечки памяти при использовании SQLite - PullRequest
2 голосов
/ 29 ноября 2010

Я использую SQLite в Visual C ++, MFC. Я sqlite3_finalize каждый оператор, подготовленный sqlite3_prepare. При закрытии приложения закрываю дб соединение.

Где может быть проблема? Спасибо

Ответы [ 2 ]

1 голос
/ 20 июля 2013

Основываясь на ответе выше, я нашел из документации sqlite, что если в любом операторе, выполняемом через sqlite3_exec, есть ошибка, возвращаемая sqlite, то sqlite выделяет память, необходимую для сообщения об ошибке, и ответственность за освобождение этой памяти лежит на приложении.

1 голос
/ 29 ноября 2010

sqlite3 иногда выделяет строки, которые должны быть освобождены пользователем, такие как сообщение об ошибке из вызова sqlite3_exec (). Поиск на этой странице

http://www.sqlite.org/capi3ref.html

для строки sqlite3_free, и вы найдете несколько таких случаев. Вы уверены, что правильно обрабатываете эти случаи в своем коде?

По моему опыту, sqlite3 обычно не пропускает память самостоятельно, хотя ее использование памяти увеличивается очень медленно до определенной точки, поскольку он кэширует некоторую информацию, а его внутренний распределитель памяти резервирует некоторые блоки памяти. Как вы обнаружили утечку памяти и как вы определили sqlite3 как причину?

Использовали ли вы средства отладки утечек памяти MSVC? Visual Studio предоставляет средство отладки памяти на основе исходного кода:

http://msdn.microsoft.com/en-us/library/x98tx3cf%28v=VS.100%29.aspx

Это должно помочь вам точно определить причину утечки памяти.

...