FYI. I replaced the sqlite3_exec call with sqlite3_prepare_v2, sqlite3_step, sqlite3_finalize.
Same results. -----Original Message----- From: sqlite-users-boun...@sqlite.org [mailto:sqlite-users-boun...@sqlite.org]on Behalf Of Greg Morehead Sent: Friday, June 26, 2009 4:21 PM To: General Discussion of SQLite Database Subject: Re: [sqlite] Memory leak with sqlite3_exec on qnx 6.4.1 Based on the documentation in the link you sent I should only need to call free if there was an error message. But, since there is no harm in calling sqlite3_free on a null pointer I moved it out of the if statement. It had no impact, still leaking like faucet. -----Original Message----- From: sqlite-users-boun...@sqlite.org [mailto:sqlite-users-boun...@sqlite.org]on Behalf Of Ribeiro, Glauber Sent: Friday, June 26, 2009 4:17 PM To: General Discussion of SQLite Database Subject: Re: [sqlite] Memory leak with sqlite3_exec on qnx 6.4.1 I took only a quick look, but it seems to me that sqlite3_free is only being called if there is an error. See http://sqlite.org/c3ref/exec.html g -----Original Message----- From: sqlite-users-boun...@sqlite.org [mailto:sqlite-users-boun...@sqlite.org] On Behalf Of Greg Morehead Sent: Friday, June 26, 2009 2:49 PM To: sqlite-users@sqlite.org Subject: [sqlite] Memory leak with sqlite3_exec on qnx 6.4.1 The extremely simple app below leaks. What am I doing wrong?? Please help. #include <cstdlib> #include <iostream> #include "stdio.h" #include "sqlite3.h" #include <unistd.h> #define TFQ_SQL_DB_NAME "/powerblock/datalog/TFQ-test.db" #define _TABLE_NAME "sqltest" int main(int argc, char *argv[]) { char sql[1024]; char * errmsg; sqlite3* db_; int flags = SQLITE_OPEN_FULLMUTEX | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE; if (sqlite3_open_v2(TFQ_SQL_DB_NAME , &db_ , flags , NULL) != SQLITE_OK) { return EXIT_FAILURE; } sprintf(sql, "CREATE TABLE %s_info (col_idx, col_name, data_type, meta_type, description, grouping); " , _TABLE_NAME); int retval = sqlite3_exec(db_, sql, 0, 0, &errmsg); int idx = 1; while(retval==SQLITE_OK) { sprintf(sql, "INSERT INTO %s_info VALUES(%d, \"rowid\", \"INTEGER\", \"%s\", \"Unique Row ID\", \"_SQL\");" , _TABLE_NAME, idx++, "INTEGER" ); retval = sqlite3_exec(db_, sql, 0, 0, &errmsg); if(retval != SQLITE_OK) { printf("Recieved an sqlite failure. : Failed msg: %s", errmsg); sqlite3_free(errmsg); } else printf("Successfully inserted row idx %d\r\n", idx); usleep(50000); } return EXIT_SUCCESS; } _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users