Ada.Strings.Unbounded 内存泄漏?

NWS*_*NWS 2 valgrind memory-leaks ada

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

代码片段:

procedure Parse (Str    : in     String;
Run Code Online (Sandbox Code Playgroud)

... 做东西...

declare
   New_Element : constant Ada.Strings.Unbounded.Unbounded_String :=
     Ada.Strings.Unbounded.To_Unbounded_String (Str); -- this leaks
begin
Run Code Online (Sandbox Code Playgroud)

瓦尔研磨输出:

==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)
Run Code Online (Sandbox Code Playgroud)

其中 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

任何帮助或见解表示赞赏,

国家气象局。

小智 5

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

现在,如果您认为确实存在内存泄漏,请在循环中调用此函数,并查看内存是否继续增长。如果确实如此,请提交错误报告,或者更好的是,尝试查找并修复泄漏,并随错误报告一起发送补丁。

希望能帮助到你。