Re: [sqlite] Hi, new member here (and also my first question)
> Any idea to trace this bug? Anything would be appreciated because I don't > have a clue whatsoever. Thanks. To have any idea on our side we should see your code and better a stacktrace of the crash too. Pavel On Sun, Oct 18, 2009 at 11:34 PM,wrote: > Sorry for the long reply. Been busy with other things. Yeah I initialize my > sqlite3_stmt* pointer in the constructor and de-initialize it in the > destructor. BTW, here's a snippet of my program: > > QueryStatement::QueryStatement(sqlite3* dbaseConn, const char* syntax): > m_SQL_syntax(""), > m_QueryStmtHandler(NULL), > m_QueryIndex(0), > m_IsRow(false), > m_IsRowDone(false), > m_IsBoundable(false), > m_IsResetable(false) > { > int result = prepare(dbaseConn, syntax); // The usual sqlite3_prepare. > Pointer is stored in: m_QueryStmtHandler. > if (result != SQLITE_OK) > { > throw result; > } > > } > > QueryStatement::~QueryStatement() > { > finalize(); // The usual sqlite3_finalize. > } > > I don't see anything wrong with it IMHO. BTW, the error usually occurs if > I combine between sqlite3_exec and the usual sqlite3_prepare -> step -> > finalize steps in the same method. For example: I use sqlite3_exec with > "CREATE TABLE stamps (name char(100) NOT NULL, thumbName char(100), > category_id int NOT NULL, number_picked FLOAT, PRIMARY KEY( name ), > FOREIGN KEY (category_id) REFERENCES asset_category(id_asset) )" and then > initialize the items inside the table with sqlite3_prepare like this: > "INSERT INTO stamps (name, thumbName, category_id, number_picked) values > (?, ?, ?, ?)", bind the values and use a loop to insert all the items. It > usually crashes during the insertion. But if I close the db and re-opened > it again before preparing the "INSERT" statement, it worked flawlessly. > Weird. > > Any idea to trace this bug? Anything would be appreciated because I don't > have a clue whatsoever. Thanks. > > Pavel Ivanov wrote: >> Do you initialize your sqlite3_stmt* pointer in constructor? Is there >> any corrupting memory code in other parts of your application? >> You know, it's pretty hard to read and debug your application without >> seeing it. But believe us there's nothing wrong with SQLite and >> sqlite3MemFree(), something wrong with your application and so start >> looking from this point of view. >> You can easily debug the problem as long as you already started >> reading SQLite's code: just look what pointer causes the problem, look >> what value it has at the statement initialization, put breakpoint at >> its change and put breakpoint at sqlite3MemFree with this pointer >> value... >> >> >> Pavel >> >> On Tue, Oct 13, 2009 at 11:46 PM, wrote: >>> Oh yeah, I forgot to tell you that I'm using Visual C++ 2008 >>> professional >>> and it always crashes at this: >>> >>> C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src\dbgheap.c - >>> function "_free_dbg_nolock", line 1317: >>> /* >>> * If this ASSERT fails, a bad pointer has been passed in. It may >>> be >>> * totally bogus, or it may have been allocated from another >>> heap. >>> * The pointer MUST come from the 'local' heap. >>> */ >>> _ASSERTE(_CrtIsValidHeapPointer(pUserData)); >>> >>> >>> >>> ben...@cs.its.ac.id wrote: Well, I'm pretty sure I haven't. FYI, I wrapped the sqlite3_stmt into a class and only call its sqlite3_finalize on its destructor. So there's no way that it would be called twice. Or so I think. Pavel Ivanov wrote: >> The pPrior or p pointer isn't null so it should've been >> freed without error IMHO. Can anybody tell me what's wrong with it? >> Thanks >> a lot in advance. > > If "pPrior or p pointer" isn't null but was already freed then double > free can cause segmentation fault. In other words most probably you're > calling sqlite3_finalize on already finalized statement. > > Pavel > > On Tue, Oct 13, 2009 at 5:58 AM, wrote: >> Hi there, I'm a new member of the mailing list. Nice to meet you all. >> >> BTW, I've got one problem that's been bugging me for weeks. >> >> Occasionally (not always), I got a seg fault at "static void >> sqlite3MemFree(void *pPrior)". It happened when I do sqlite3_reset or >> sqlite3_finalize. The pPrior or p pointer isn't null so it should've >> been >> freed without error IMHO. Can anybody tell me what's wrong with it? >> Thanks >> a lot in advance. >> >> >>> >>> >>> Fare thee well, >>> Bawenang R. P. P. >>> >>> >>> "If a picture is worth a thousand words, an animations is worth a >>> thousand >>> pictures. And to take that a step further, a game is worth a thousand >>> animations." – Peter Raad, Executive Director, The Guildhall at SMU >>> >>> >>> -- >>>
Re: [sqlite] Hi, new member here (and also my first question)
Sorry for the long reply. Been busy with other things. Yeah I initialize my sqlite3_stmt* pointer in the constructor and de-initialize it in the destructor. BTW, here's a snippet of my program: QueryStatement::QueryStatement(sqlite3* dbaseConn, const char* syntax): m_SQL_syntax(""), m_QueryStmtHandler(NULL), m_QueryIndex(0), m_IsRow(false), m_IsRowDone(false), m_IsBoundable(false), m_IsResetable(false) { int result = prepare(dbaseConn, syntax); // The usual sqlite3_prepare. Pointer is stored in: m_QueryStmtHandler. if (result != SQLITE_OK) { throw result; } } QueryStatement::~QueryStatement() { finalize(); // The usual sqlite3_finalize. } I don't see anything wrong with it IMHO. BTW, the error usually occurs if I combine between sqlite3_exec and the usual sqlite3_prepare -> step -> finalize steps in the same method. For example: I use sqlite3_exec with "CREATE TABLE stamps (name char(100) NOT NULL, thumbName char(100), category_id int NOT NULL, number_picked FLOAT, PRIMARY KEY( name ), FOREIGN KEY (category_id) REFERENCES asset_category(id_asset) )" and then initialize the items inside the table with sqlite3_prepare like this: "INSERT INTO stamps (name, thumbName, category_id, number_picked) values (?, ?, ?, ?)", bind the values and use a loop to insert all the items. It usually crashes during the insertion. But if I close the db and re-opened it again before preparing the "INSERT" statement, it worked flawlessly. Weird. Any idea to trace this bug? Anything would be appreciated because I don't have a clue whatsoever. Thanks. Pavel Ivanov wrote: > Do you initialize your sqlite3_stmt* pointer in constructor? Is there > any corrupting memory code in other parts of your application? > You know, it's pretty hard to read and debug your application without > seeing it. But believe us there's nothing wrong with SQLite and > sqlite3MemFree(), something wrong with your application and so start > looking from this point of view. > You can easily debug the problem as long as you already started > reading SQLite's code: just look what pointer causes the problem, look > what value it has at the statement initialization, put breakpoint at > its change and put breakpoint at sqlite3MemFree with this pointer > value... > > > Pavel > > On Tue, Oct 13, 2009 at 11:46 PM,wrote: >> Oh yeah, I forgot to tell you that I'm using Visual C++ 2008 >> professional >> and it always crashes at this: >> >> C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src\dbgheap.c - >> function "_free_dbg_nolock", line 1317: >> /* >> * If this ASSERT fails, a bad pointer has been passed in. It may >> be >> * totally bogus, or it may have been allocated from another >> heap. >> * The pointer MUST come from the 'local' heap. >> */ >> _ASSERTE(_CrtIsValidHeapPointer(pUserData)); >> >> >> >> ben...@cs.its.ac.id wrote: >>> Well, I'm pretty sure I haven't. FYI, I wrapped the sqlite3_stmt into a >>> class and only call its sqlite3_finalize on its destructor. So there's >>> no >>> way that it would be called twice. Or so I think. >>> >>> Pavel Ivanov wrote: > The pPrior or p pointer isn't null so it should've been > freed without error IMHO. Can anybody tell me what's wrong with it? > Thanks > a lot in advance. If "pPrior or p pointer" isn't null but was already freed then double free can cause segmentation fault. In other words most probably you're calling sqlite3_finalize on already finalized statement. Pavel On Tue, Oct 13, 2009 at 5:58 AM, wrote: > Hi there, I'm a new member of the mailing list. Nice to meet you all. > > BTW, I've got one problem that's been bugging me for weeks. > > Occasionally (not always), I got a seg fault at "static void > sqlite3MemFree(void *pPrior)". It happened when I do sqlite3_reset or > sqlite3_finalize. The pPrior or p pointer isn't null so it should've > been > freed without error IMHO. Can anybody tell me what's wrong with it? > Thanks > a lot in advance. > > >> >> >> Fare thee well, >> Bawenang R. P. P. >> >> >> "If a picture is worth a thousand words, an animations is worth a >> thousand >> pictures. And to take that a step further, a game is worth a thousand >> animations." Peter Raad, Executive Director, The Guildhall at SMU >> >> >> -- >> >> http://www.its.ac.id >> ___ >> 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 > Fare thee well, Bawenang R. P. P. "If a
Re: [sqlite] Hi, new member here (and also my first question)
Do you initialize your sqlite3_stmt* pointer in constructor? Is there any corrupting memory code in other parts of your application? You know, it's pretty hard to read and debug your application without seeing it. But believe us there's nothing wrong with SQLite and sqlite3MemFree(), something wrong with your application and so start looking from this point of view. You can easily debug the problem as long as you already started reading SQLite's code: just look what pointer causes the problem, look what value it has at the statement initialization, put breakpoint at its change and put breakpoint at sqlite3MemFree with this pointer value... Pavel On Tue, Oct 13, 2009 at 11:46 PM,wrote: > Oh yeah, I forgot to tell you that I'm using Visual C++ 2008 professional > and it always crashes at this: > > C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src\dbgheap.c - > function "_free_dbg_nolock", line 1317: > /* > * If this ASSERT fails, a bad pointer has been passed in. It may be > * totally bogus, or it may have been allocated from another heap. > * The pointer MUST come from the 'local' heap. > */ > _ASSERTE(_CrtIsValidHeapPointer(pUserData)); > > > > ben...@cs.its.ac.id wrote: >> Well, I'm pretty sure I haven't. FYI, I wrapped the sqlite3_stmt into a >> class and only call its sqlite3_finalize on its destructor. So there's no >> way that it would be called twice. Or so I think. >> >> Pavel Ivanov wrote: The pPrior or p pointer isn't null so it should've been freed without error IMHO. Can anybody tell me what's wrong with it? Thanks a lot in advance. >>> >>> If "pPrior or p pointer" isn't null but was already freed then double >>> free can cause segmentation fault. In other words most probably you're >>> calling sqlite3_finalize on already finalized statement. >>> >>> Pavel >>> >>> On Tue, Oct 13, 2009 at 5:58 AM, wrote: Hi there, I'm a new member of the mailing list. Nice to meet you all. BTW, I've got one problem that's been bugging me for weeks. Occasionally (not always), I got a seg fault at "static void sqlite3MemFree(void *pPrior)". It happened when I do sqlite3_reset or sqlite3_finalize. The pPrior or p pointer isn't null so it should've been freed without error IMHO. Can anybody tell me what's wrong with it? Thanks a lot in advance. > > > Fare thee well, > Bawenang R. P. P. > > > "If a picture is worth a thousand words, an animations is worth a thousand > pictures. And to take that a step further, a game is worth a thousand > animations." – Peter Raad, Executive Director, The Guildhall at SMU > > > -- > > http://www.its.ac.id > ___ > 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
Re: [sqlite] Hi, new member here (and also my first question)
Well, I'm pretty sure I haven't. FYI, I wrapped the sqlite3_stmt into a class and only call its sqlite3_finalize on its destructor. So there's no way that it would be called twice. Or so I think. Pavel Ivanov wrote: >> The pPrior or p pointer isn't null so it should've been >> freed without error IMHO. Can anybody tell me what's wrong with it? >> Thanks >> a lot in advance. > > If "pPrior or p pointer" isn't null but was already freed then double > free can cause segmentation fault. In other words most probably you're > calling sqlite3_finalize on already finalized statement. > > Pavel > > On Tue, Oct 13, 2009 at 5:58 AM,wrote: >> Hi there, I'm a new member of the mailing list. Nice to meet you all. >> >> BTW, I've got one problem that's been bugging me for weeks. >> >> Occasionally (not always), I got a seg fault at "static void >> sqlite3MemFree(void *pPrior)". It happened when I do sqlite3_reset or >> sqlite3_finalize. The pPrior or p pointer isn't null so it should've >> been >> freed without error IMHO. Can anybody tell me what's wrong with it? >> Thanks >> a lot in advance. >> >> >> Fare thee well, >> Bawenang R. P. P. >> >> >> "If a picture is worth a thousand words, an animations is worth a >> thousand >> pictures. And to take that a step further, a game is worth a thousand >> animations." Peter Raad, Executive Director, The Guildhall at SMU >> >> >> -- Fare thee well, Bawenang R. P. P. "If a picture is worth a thousand words, an animations is worth a thousand pictures. And to take that a step further, a game is worth a thousand animations." Peter Raad, Executive Director, The Guildhall at SMU -- http://www.its.ac.id ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] Hi, new member here (and also my first question)
> The pPrior or p pointer isn't null so it should've been > freed without error IMHO. Can anybody tell me what's wrong with it? Thanks > a lot in advance. If "pPrior or p pointer" isn't null but was already freed then double free can cause segmentation fault. In other words most probably you're calling sqlite3_finalize on already finalized statement. Pavel On Tue, Oct 13, 2009 at 5:58 AM,wrote: > Hi there, I'm a new member of the mailing list. Nice to meet you all. > > BTW, I've got one problem that's been bugging me for weeks. > > Occasionally (not always), I got a seg fault at "static void > sqlite3MemFree(void *pPrior)". It happened when I do sqlite3_reset or > sqlite3_finalize. The pPrior or p pointer isn't null so it should've been > freed without error IMHO. Can anybody tell me what's wrong with it? Thanks > a lot in advance. > > > Fare thee well, > Bawenang R. P. P. > > > "If a picture is worth a thousand words, an animations is worth a thousand > pictures. And to take that a step further, a game is worth a thousand > animations." – Peter Raad, Executive Director, The Guildhall at SMU > > > -- > > http://www.its.ac.id > ___ > 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] Hi, new member here (and also my first question)
Hi there, I'm a new member of the mailing list. Nice to meet you all. BTW, I've got one problem that's been bugging me for weeks. Occasionally (not always), I got a seg fault at "static void sqlite3MemFree(void *pPrior)". It happened when I do sqlite3_reset or sqlite3_finalize. The pPrior or p pointer isn't null so it should've been freed without error IMHO. Can anybody tell me what's wrong with it? Thanks a lot in advance. Fare thee well, Bawenang R. P. P. "If a picture is worth a thousand words, an animations is worth a thousand pictures. And to take that a step further, a game is worth a thousand animations." Peter Raad, Executive Director, The Guildhall at SMU -- http://www.its.ac.id ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users