My memory manager reports that the SQL below results in memory being reused after it has already been freed when it is RUN FOR A SECOND TIME on the same database connection.
Psydocode (I do not run C): sqlite3_initialize; sqlite3_open(DB_FILE_NAME, &DB); sqlite3_exec(DB, SQL, NULL, NULL, NULL); sqlite3_exec(DB, SQL, NULL, NULL, NULL); sqlite3_close(DB); sqlite3_shutdown; The database file does not exist before running sqlite3_open(). I can reproduce the problem reliably with [e4eb227b14]. There were simmilar memory reports during the development of fkeys.c. They have been fixed by [5b4d46374a] except for the one mentioned here. Finally, here is the SQL: PRAGMA foreign_keys = 0; DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t2; PRAGMA foreign_keys = 1; CREATE TABLE t1(a PRIMARY KEY, b UNIQUE); CREATE TABLE t2(x REFERENCES t1 ON UPDATE CASCADE ON DELETE CASCADE); INSERT INTO t1 VALUES('aaa', 1); INSERT INTO t2 VALUES('aaa'); UPDATE t1 SET a = 'bbb'; DELETE FROM t1; PRAGMA foreign_keys = 0; DROP TABLE t1; DROP TABLE t2; PRAGMA foreign_keys = 1; CREATE TABLE t1(x, y, PRIMARY KEY(x, y)); CREATE TABLE t2(a, b, FOREIGN KEY(a, b) REFERENCES t1 ON UPDATE CASCADE); INSERT INTO t1 VALUES(1, 2); INSERT INTO t2 VALUES(1, 2); UPDATE t1 SET x = 5; Ralf ------------ Call stack leading to the problem: Modified byte offsets (and lengths): 512(6) The previous block size was: 2048 This block was previously allocated by thread 0x8BC, and the stack trace (return addresses) at the time was: 4088CE [DebugReallocMem] 413A48 [realloc][4198] 453A7E [...@sqlite3realloc] 453AF9 [sqlite3_realloc] 453C22 [...@sqlite3dbrealloc] 440AE6 [...@sqlite3vdbeswap] 440B37 [...@sqlite3vdbeaddop3] 440B8F [...@sqlite3vdbeaddop0] 4256CE [...@sqlite3triggersexist] 4539A3 [...@sqlite3dbfree] 425894 [...@sqlite3triggersexist] The allocation number was: 632 The block was previously freed by thread 0x8BC, and the stack trace (return addresses) at the time was: 413781 [Free][3285] 45397C [sqlite3_free] 4539C7 [...@sqlite3dbfree] 440FA2 [...@sqlite3vdbejumphere] 440FD2 [...@sqlite3vdbeprogramdelete] 440F5F [...@sqlite3vdbejumphere] 440F88 [...@sqlite3vdbejumphere] 44265B [...@sqlite3vdbedelete] 4425A5 [...@sqlite3vdbefinalize] 42DA71 [sqlite3_exec] 45B9F7 [D:\DI_Stable\Lib\SQLite3\Test\Test.dpr][Test][initialization][45] The current thread ID is 0x8BC, and the stack trace (return addresses) leading to this error is: 408698 [DebugGetMem] 4088CE [DebugReallocMem] 413A48 [realloc][4198] 453A7E [...@sqlite3realloc] 453AF9 [sqlite3_realloc] 453C22 [...@sqlite3dbrealloc] 440AE6 [...@sqlite3vdbeswap] 440B37 [...@sqlite3vdbeaddop3] 440B8F [...@sqlite3vdbeaddop0] 4256CE [...@sqlite3triggersexist] 4539A3 [...@sqlite3dbfree] Current memory dump of 256 bytes starting at pointer address 7FEE3CD0: A0 DC 46 00 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 Ü F . _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users