c++ - Windows - SQLite 事件临界区

标签 c++ windows sqlite

我在 teSTLib.dll 中使用 SQLite3 3.8.8.2,它有一个导出函数 void DoDBOperation(),它只打开数据库然后关闭它。我编写了一个 EXE,它使用 LoadLibararyEx() 加载 DLL,调用函数 DoDBOperation(),最后使用 FreeLibrary() 卸载 DLL。我在一个循环中执行了 10000 次,导致内存泄漏。

经过调查,我发现每次加载和卸载 teSTLib.dll 时,它都会泄漏一个 48 字节的临界区 DS,正如 WinDBG 在调查堆后报告的那样。 AppVerifier 也报告正在卸载具有事件临界区的库。

如果我静态链接 DLL,则不会发生此类泄漏。我在谷歌上搜索了很多但没有帮助。我尝试调试 sqlite3.c 但没有成功找到泄漏。

有人可以就此问题提供一些指导吗?任何帮助,将不胜感激。谢谢!!

最佳答案

你应该调用sqlite3_shutdown在 dll 上卸载以正确清理它分配的资源(例如在 DLL_PROCESS_DETACH 处理程序中)。

关于c++ - Windows - SQLite 事件临界区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30235388/

相关文章:

我可以使用 GCC 编译一个自动要求管理员权限的 C 程序吗?

php - Windows 上的 postgresql + nginx 运行时错误

python - 在 Python 的 sqlite3 中使用外键

c++ - Google pnacl-clang++下如何搭建Leptonica库

C++ Linux 中断 nanosleep

c++ - 如何检查是否在运行时定义了 C++ 抽象方法

python - “tee”不被识别为内部或外部命令、可操作程序或批处理文件

sqlite - 在 CHECK 约束中使用子查询的替代方法?

sql - 两个连接改变案例大小

c++ - 文件转换的输出问题