I have used SQLite in a whole bundle of applications and I love it.
However, I've got an app that's being written in Java -  I've got a JNI
library (Solaris & Windows) for SQLite, but I really want something
platform independent.

I've been worn down by my quest for a comparable product to SQLite
written in pure Java and have come to the conclusion that it doesn't
exit.  I've looked at Derby, QED, Axion, blah blah and I'm not too
impressed by any of them.
None of them are as good as SQLite and they all use multiple files for
their storage.

My next port of call is to look at the feasibility of converting the
SQLite source into Java!  
I'd like to know whether a) anyone has tried this before, b) what might
be the pitfalls and c) am I being completely mental in even thinking
about trying this?

Steve




-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]
rg] On Behalf Of Martin Engelschalk
Sent: 24 October 2005 20:32
To: sqlite-users@sqlite.org
Subject: Re: [sqlite] glibc detected...

Hi,

As Christian said, probably your heap is corrupted. Your backtrace 
clearly indicates that.
The typical errors that lead to this are
- you free() some memory twice
- you free more or less memory than you malloc() ed
- you overrun a buffer on the heap

valgrind is a good tool to detect such mistakes.

Martin

[EMAIL PROTECTED] schrieb:

>tanx for the advice...but how to avoid heap corruption? and why does it
happen?
>anyway, finally here is the backtrace:
>
>*** glibc detected *** malloc(): memory corruption: 0x0808e078 ***
>
>Program received signal SIGABRT, Aborted.
>[Switching to Thread -1213548864 (LWP 4348)]
>0xffffe410 in __kernel_vsyscall ()
>(gdb) ba
>#0  0xffffe410 in __kernel_vsyscall ()
>#1  0x4fad57d5 in raise () from /lib/tls/libc.so.6
>#2  0x4fad7149 in abort () from /lib/tls/libc.so.6
>#3  0x4fb0927a in __libc_message () from /lib/tls/libc.so.6
>#4  0x4fb1049c in _int_malloc () from /lib/tls/libc.so.6
>#5  0x4fb11f01 in malloc () from /lib/tls/libc.so.6
>#6  0xb7d95c03 in sqlite3Malloc (n=-16) at ./src/util.c:296
>#7  0xb7d885f2 in sqlite3ParserAlloc (
>    mallocProc=0xb7d95bdc <sqlite3Malloc>) at parse.c:1302
>#8  0xb7d9382d in sqlite3RunParser (pParse=0xbffff550,
>    zSql=0x8093c38 "SELECT subjNum FROM \"images\" WHERE id==15;",
>    pzErrMsg=0xbffff54c) at ./src/tokenize.c:349
>#9  0xb7d8c777 in sqlite3_prepare (db=0x808d5d0,
>    zSql=0x8093c38 "SELECT subjNum FROM \"images\" WHERE id==15;",
>    nBytes=-1, ppStmt=0xbffff648, pzTail=0x0) at ./src/prepare.c:440
>#10 0x0804d0ef in subjId (db=0x808d5d0, id=15, subj=0xbffff748,
>    test=0x0) at database.c:901
>#11 0x0804e8f8 in featVect (db=0x808d5d0, recog_id=1, maxEigen=0)
>    at database.c:1662
>#12 0x0804a26a in main (argc=5, argv=0xbffff864) at main.c:400
>(gdb)
>
>I also noticed that error occours even if the requested row id is every
time
>the same!
>So the problem occours after a certain number of iterations.
>The code to read is something like this:
>
>            sqlite3_stmt *pStmt=0;
>       char *sql=0;
>       int sql_error=0;
>       
>       asprintf(&sql, "SELECT subjNum FROM \"images\" WHERE id==%d;"
id);
>       if ( !sqlite3_prepare(db, sql, -1, &pStmt, 0) )
>       {
>               if (sqlite3_step(pStmt)==SQLITE_ROW)
>               {
>                       test = (char*) sqlite3_column_text (pStmt,0);
>               }
>               else
>               {
>                       fprintf(stderr,"\nWARNING: No image associated
to requested id\n");
>                       sql_error = 1;
>               }
>       }
>       else
>       {
>               fprintf(stderr, "\nERROR: SQL prepare error:\n\t%s\n",
sqlite3_errmsg(db));
>               sql_error=1;
>       }
>       
>       if ( sqlite3_finalize(pStmt) != SQLITE_OK )
>       {
>               fprintf(stderr, "\nERROR: SQL finalization
error:\n\t%s\n", sqlite3_errmsg(db));
>               sql_error=1;
>       }
>       
>       free(sql);
>       
>       if (sql_error)
>       {
>               sqlite3_close (db);
>               exit(1);
>       }
>
>it is inside a function that is called iteratively from another
function,
>incrementing the passed id num
>tanks
>
>__________________________________________________________________
>TISCALI ADSL
>Solo con Tiscali Adsl navighi senza limiti e telefoni senza canone 
>Telecom a partire da 19,95 Euro/mese.
>Attivala subito, I PRIMI DUE MESI SONO GRATIS! CLICCA QUI:
>http://abbonati.tiscali.it/adsl/sa/1e25flat_tc/
>
>
>
>  
>


Reply via email to