sql-server - SQLDriverConnect 期间的 MSSQL 内存泄漏问题(在 /usr/lib64/libodbc.so.2.0.0 中)
问题描述
我使用 valgrind 来检查内存泄漏,我看到很多重复的消息,如下所示:
==29757== HEAP SUMMARY:
==29757== in use at exit: 62,472 bytes in 850 blocks
==29757== total heap usage: 7,597 allocs, 6,747 frees, 2,132,087 bytes allocated
==29757==
==29757== 1 bytes in 1 blocks are still reachable in loss record 1 of 767
==29757== at 0x4C29F73: malloc (vg_replace_malloc.c:309)
==29757== by 0x6020AF9: strdup (in /usr/lib64/libc-2.17.so)
==29757== by 0x5559B0F: ??? (in /usr/lib64/libodbc.so.2.0.0)
==29757== by 0x5559DF9: ??? (in /usr/lib64/libodbc.so.2.0.0)
==29757== by 0x551F0C2: SQLDriverConnect (in /usr/lib64/libodbc.so.2.0.0)
==29757== by 0x41125B: Database::init(std::string const&)
==29757== 1 bytes in 1 blocks are still reachable in loss record 2 of 767
==29757== at 0x4C29F73: malloc (vg_replace_malloc.c:309)
==29757== by 0x6020AF9: strdup (in /usr/lib64/libc-2.17.so)
==29757== by 0x5559ABA: ??? (in /usr/lib64/libodbc.so.2.0.0)
==29757== by 0x5559DF9: ??? (in /usr/lib64/libodbc.so.2.0.0)
==29757== by 0x551F0C2: SQLDriverConnect (in /usr/lib64/libodbc.so.2.0.0)
==29757== by 0x41125B: Database::init(std::string const&)
我也检查过
https://github.com/Azure/unixODBC-MSSQL/blob/master/DriverManager/SQLDriverConnect.c
我不明白为什么由于 SQLDriverConnect 导致内存泄漏
我想知道为什么我可以看到这么多重复的消息。
解决方案
这些报告显示仍可访问的内存。对于许多程序来说,这种“仍然可以访问”的内存不是问题,因为它们(故意)在退出之前不会释放所有分配的内存,因为这将是无用的工作。
上面显示的 2 个报告非常相似,但 valgrind 认为它们不同,因为堆栈跟踪略有不同:您有一个不同的程序计数器。
推荐阅读
- airflow - 带有 python_callable 集的 PythonOperator 不断执行
- php - 对来自不同来源的项目进行分页
- javascript - 提交表单时停止执行计时器功能
- json.net - 从迭代路径构建 JObject
- ionic-framework - 离子从 2.0 更新到 3.9
- android - 如何控制同一层内各个 Mapbox 特征的 z 轴?
- scala - 笔记本上未显示带有 RDD foreach 的 Zeppelin Spark println
- javafx - 停止文件选择器键事件传播到 JavaFX 中的(父)阶段
- db2 - 如何在 db2 备份时禁用并行性
- ios - Xcode 10 - iPhone X 黑条