Ну так загляните в исходники драйвера для ODBC, посмотрите что именно выделяется (какая структура данных?), кто ее должен освобождать, когда...
Может нужно просто делать close соединению, при обнаружении отключения.
Old, спасибо за комментарий.
В код глядел, ничего гиперстрашного не увидел, все переменные локальные, ничего там не создается динамически.
QVarLengthArray<SQLTCHAR> connOut(1024);
memset(connOut.data(), 0, connOut.size() * sizeof(SQLTCHAR));
r = SQLDriverConnect(d->hDbc,
NULL,
toSQLTCHAR(connQStr).data(),
(SQLSMALLINT)connQStr.length(),
connOut.data(),
1024,
&cb,
/*SQL_DRIVER_NOPROMPT*/0);
if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO) {
setLastError(qMakeError(tr("Unable to connect"), QSqlError::ConnectionError, d));
setOpenError(true);
return false;
}
По вызову close() делается и cleanup(), в котором есть пара SQLFreeHandle.
Но моя проблема в том, что я имею утечку памяти еще ДО ТОГО, как я установил соединение. Т.е. программа запускается, пробует соединиться, не получается, через 30 секунд пробует снова и так далее.
Хотя я делал close() при неудачной попытке соединения - это не влияло на ситуацию.