Ok tout se rejoint, j'avais mal compris la doc:
The sqlite3_finalize() routine deallocates a prepared SQL statement. All prepared statements must be finalized before the database can be closed. The sqlite3_reset() routine resets a prepared SQL statement so that it can be executed again.
Donc, on peut faire:
sqlite3_prepare(db,"INSERT INTO tbl (champ1,champ2) VALUES ( ?001, 5 )",-1,&statement,&zTail);
for (int i =0;i<10000;i++){
sqlite3_bind_int(statement, 1, i);
// Execute la
rc = sqlite3_step(statement);
// Nettoyage
//sqlite3_finalize(statement); // commenté == Ne libere pas le statement compilé
sqlite3_reset(statement);
}
et dans le cas plus haut, y a pas besoin de
reset, pas de fuite de mémoire.