memory-leaks - Ada.Strings.Unbounded 内存泄漏?

标签 memory-leaks valgrind ada

我有一个奇怪的内存泄漏,似乎是库函数 to_unbounded_string 泄漏了!

代码片段:

procedure Parse (Str    : in     String;

...做事...

declare
   New_Element : constant Ada.Strings.Unbounded.Unbounded_String :=
     Ada.Strings.Unbounded.To_Unbounded_String (Str); -- this leaks
begin

valgrind 输出:

==6009== 10,276 bytes in 1 blocks are possibly lost in loss record 153 of 153
==6009==    at 0x4025BD3: malloc (vg_replace_malloc.c:236)
==6009==    by 0x42703B8: __gnat_malloc (in /usr/lib/libgnat-4.4.so.1)
==6009==    by 0x4269480: system__secondary_stack__ss_allocate (in /usr/lib/libgnat-4.4.so.1)
==6009==    by 0x414929B: ada__strings__unbounded__to_unbounded_string (in /usr/lib/libgnat-4.4.so.1)
==6009==    by 0x80F8AD4: syntax__parser__dash_parser__parseXn (token_parser_g.adb:35)

其中 token_parser_g.adb:35 在上面列为“-- this leaks”行。

其他信息:Gnatmake 版本 4.4.5。 gcc 版本 4.4 valgrind 版本 valgrind-3.6.0.SVN-Debian,valgrind 选项 -v --leak-check=full --read-var-info=yes --show-reachable=no

感谢任何帮助或见解,

新创建。

最佳答案

Valgrind 明确表示可能存在内存泄漏。这并不一定意味着有一个。例如,如果对该函数的第一次调用分配了一个内存池,该内存池在程序的生命周期内被重新使用但从未被释放,Valgrind 将报告它为可能的内存泄漏,即使它不是,因为这是一种常见的做法是,内存将在进程终止时返回给操作系统。

现在,如果您认为确实存在内存泄漏,请在循环中调用此函数,然后看到内存继续增长。如果确实如此 - 提交错误报告或什至更好,尝试查找并修复泄漏并发送补丁和错误报告。

希望对您有所帮助。

关于memory-leaks - Ada.Strings.Unbounded 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7354669/

相关文章:

c++ - 如何在执行 C++ 期间动态查看堆

c++ - 寻找一种在运行时检测 valgrind/memcheck 而不包括 valgrind header 的方法

c - Valgrind 的输出缺少基本值

Ada 将项目添加到数组中

node.js - 使用 memwatch-node 识别闭包的内存泄漏

ios - 快速关闭和内存泄漏

java - 使用无垃圾 Log4j 在 Web 应用程序中进行参数化日志记录

c++ - 为什么 valgrind 说基本的 SDL 程序正在泄漏内存?

hex - 在 Ada 中将整数值转换为十六进制

ada - 如何使用 Put_Line 方法输出整数?