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

Reply via email to