On Tue, 2007-06-19 at 10:58 +0530, anand chugh wrote: > Hi > > I am having code like this: > > rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0); > if( rc!=SQLITE_OK ){ > return rc; > } > sqlite3_bind_text(pStmt, 1, zKey, -1, SQLITE_STATIC); > sqlite3_bind_blob(pStmt, 2, zBlob, nBlob, SQLITE_STATIC); > > while( sqlite3_step(pStmt)==SQLITE_ROW ) > { > *pnBlob = sqlite3_column_bytes(pStmt, 0); > *pzBlob = (unsigned char *)malloc(*pnBlob); > memcpy(*pzBlob, sqlite3_column_blob(pStmt, 0), *pnBlob); > } > > sqlite3_finalize(pStmt); > > My question here is do I need to do sqlite3_finalize(pStmt); after > every sqlite3_step() to free all memory allocated by > sqlite3_step().
No. Exactly one sqlite3_finalize() for each sqlite3_prepare(). In this respect the code above is fine. It's not SQLite related, but if the SQL statement returns more than one row, the malloc() in the while loop will cause a memory leak. Dan. > Does calling finalize at end will free all memory > allocated by all steps statements? > > Example shown http://www.sqlite.org/cvstrac/wiki?p=BlobExample does > same , it calls finalize after every step. > > My Program shows some Memory Leaks(Virtual Bytes). > > Please clarify. > > Anand > > ----------------------------------------------------------------------------- > To unsubscribe, send email to [EMAIL PROTECTED] > ----------------------------------------------------------------------------- > ----------------------------------------------------------------------------- To unsubscribe, send email to [EMAIL PROTECTED] -----------------------------------------------------------------------------