Valgrind сообщает неиницализированную ошибку значения о sqlite3_prepare_v2 и sqlite3_step в следующих два методах обертки в .:отчетов, valgrind неиницализированного значения в sqlite3_step и sqlite3_prepare_v2
ExecQuery:
bool
CSQLiteDB::execQuery(const char* szSQL,CSQLiteQuery& sqlite_query_out, string* error /*=NULL*/)
{
if(!checkDB()){
return false;
}
//HERE IS THE ESSENCE
sqlite3_stmt* pVM = NULL;
if(!compile(szSQL,&pVM,error))
{
return false;
}
int nRet = sqlite3_step(pVM); //Here is the second call with uninitialised value.
//HERE IS THE END OF THE ESSENCE
if (nRet == SQLITE_DONE)
{
sqlite_query_out = CSQLiteQuery(mpDB, pVM, true/*eof*/);
return true;
}
else if (nRet == SQLITE_ROW)
{
// at least 1 row
sqlite_query_out = CSQLiteQuery(mpDB, pVM, false/*eof*/);
return true;
}
else
{
nRet = sqlite3_finalize(pVM);
if(error)
*error= sqlite3_errmsg(mpDB);
return false;
}
}
компиляция (вызывается из ExecQuery)
bool
CSQLiteDB::compile(const char* szSQL,sqlite3_stmt** pVM, string* error /*=NULL*/)
{
checkDB();
const char* szTail = 0;
int nRet = sqlite3_prepare_v2(mpDB, szSQL, -1, pVM, &szTail); //Here is the first call with uninitialized error.
if (nRet != SQLITE_OK)
{
if(error)
*error = sqlite3_errmsg(mpDB);
return false;
}
return true;
}
Что может быть неправильным? В sqlite3_prepare_v2 значение pVM является выходным. И pVM int sqlite3_step не может быть унифицирован из-за sqlite3_prepare_v2.
Действительно ли valgrind жалуется на строку кода внутри вызова SQLite? или что ваш код виноват? Иногда valgrind ложные срабатывания и могут быть проигнорированы ... – gravitron
Есть много более глубокой линии в стеке Valgrind в этом сообщении об ошибке с ... sqlite3VdbeExec ... sqlite3Step ... sqlite3_step. К сожалению, мой компьютер-разработчик здесь не на выходные. Я не знаю, чем могу проигнорировать неудачу или нет. –