Re: [sqlite] Memory Leak on select ?

2008-03-27 Thread Igor Tandetnik
<[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> I'm using sqlite3 on embedded system.
> I've got a very very large
> memory usage.
>
> zSql =
> sqlite3_mprintf("SELECT PortNumber, RangeMin, RangeMax, Offset, MinL,
> MinLL, MaxH, MaxHH, Delay, Hysteresis, " \
>"Alarm,
> TimeAlarm FROM input_ai WHERE Address=%d and Monitor='Y';", 7);

sqlite3_mprintf allocates memory on the heap and returns pointer to it. 
You should deallocate it with sqlite3_free. Better still, use 
parameterized query - see sqlite3_bind_*

Igor Tandetnik



___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


[sqlite] Memory Leak on select ?

2008-03-27 Thread [EMAIL PROTECTED]
I'm using sqlite3 on embedded system. 
I've got a very very large 
memory usage.

My program must loop to show some values catched from a 
table using SELECT statement.
In a while memory usage grow over 
phisical RAM, so my device lock.
If I run the same code on a PC after 
some minutes the process use a very large amount of memory (512M+).

I 
need to use some function to force memory release or I make some 
mistake ?

Thanks in advance
Pierluigi 

Follow sample code:

#include 

#include 
#include 
#include 

int main (int argc, char *argv[])
{

// Define variables
sqlite3 
*db;
int rc,i;
char *zErrMsg = 0;
char *zSql;
char *prevStatus;

sqlite3_stmt *stmt;

struct data
{
int iPortNumber;
float 
fRangeMin;
float fRangeMax;
float fOffset;
float fMinL;

float fMinLL;
float fMaxH;
float fMaxHH;
int iDelay;
int 
iHyster;
int iAlarm;
char *sTimeAlarm;
};  
struct data riga
[16];

// Open Database
rc = sqlite3_open("/tmp/test.db", );
if( 
rc )
{
   fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg
(db));
   sqlite3_close(db);
   exit(-1);
}

for(rc=0; rc < 
1; rc++)
{
// Init variables
i=0;

zSql = 
sqlite3_mprintf("SELECT PortNumber, RangeMin, RangeMax, Offset, MinL, 
MinLL, MaxH, MaxHH, Delay, Hysteresis, " \
   "Alarm, 
TimeAlarm FROM input_ai WHERE Address=%d and Monitor='Y';", 7);

if 
(sqlite3_prepare(db, zSql, -1, , 0) != SQLITE_OK)
return(-1);


   
// Save at least 16 rows
while ((sqlite3_step(stmt)
==SQLITE_ROW) & (i < 16))
{
  
  riga[i].iPortNumber = 
sqlite3_column_int(stmt,0);
  riga[i].fRangeMin = 
sqlite3_column_double(stmt,1);
  riga[i].fRangeMax = 
sqlite3_column_double(stmt,2);
  riga[i].fOffset = 
sqlite3_column_double(stmt,3);
  riga[i].fMinL = 
sqlite3_column_double(stmt,4);
  riga[i].fMinLL = 
sqlite3_column_double(stmt,5);
  riga[i].fMaxH = 
sqlite3_column_double(stmt,6);
  riga[i].fMaxHH = 
sqlite3_column_double(stmt,7);
  riga[i].iDelay = 
sqlite3_column_int(stmt,8);
  riga[i].iHyster = sqlite3_column_int
(stmt,9);
  riga[i].iAlarm = sqlite3_column_int(stmt,10);
  
riga[i].sTimeAlarm = (char *) sqlite3_column_text(stmt,11);

  
i++;
}

sqlite3_finalize(stmt);

}
sqlite3_close(db);

}






___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users