Thanks, Richard. I think that I fully understand what happens now. Thanks again for your patience. May I ask that do you see null pointer deferences during development regularly?
Shaobo Richard Hipp <d...@sqlite.org>于2017年2月1日周三 下午6:52写道: > On 2/1/17, Shaobo He <polarish...@gmail.com> wrote: > > Thanks for your reply. I repeated the experiment by setting > > db->mallocFailed upon return. You are right that there is no segmentation > > fault (there were some assertion failures: e.g, "sqlite3OomClear: > Assertion > > `db->lookaside.bDisable>0' failed"). Instead I got error messages saying > > out of memory. It makes sense now. May I ask where the unwinding is done? > > Does it mean the program stops execution at sqlite3SrcListAppend()? > > > > The assertion fault is probably because you are playing games with the > memory allocator - pretending that a fault occurred when it did not. > You might be able to work around that by compiling with > -DSQLITE_OMIT_LOOKASIDE. > > An OOM in sqlite3SrcListAppend() will likely cause the parser to abort > at https://www.sqlite.org/src/artifact/25ccc63ae?ln=547. > > The SQLite parser works by extracting tokens from the input string and > sending them one by one into the pushdown automaton that implements > the recognizes the LALR(1) grammar. If you break out of that loop, it > stops the parser dead in its tracks. After that, all the left-over > memory allocations are cleaned up and the tokenizer returns the > SQLITE_NOMEM error. > > There are other places where a prior OOM can cause processing to > abort. Grep for "mallocFailed" to find them. But the tokenizer loop > is the most likely spot. > -- > D. Richard Hipp > d...@sqlite.org > _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users