valgrind:使用libssh2获取仍然可访问的块

时间:2014-09-09 06:06:11

标签: c memory-management valgrind libssh2

我知道这个问题已在stackoverflow上的几个问题中得到解决。专家们提到报告仍然可以达到"不是内存泄漏。他们只是要求被释放,他们完全是程序员的选择。但我的问题是我仍然无法识别必须释放的指针。

Valgrind清楚地表明没有内存丢失,但是当我保持我的程序与zabbix的其余代码集成运行3天时,我注意到内存从2.75 GB下降到2.05 GB(我的电脑)有4 GB的RAM分配)。

==13630== LEAK SUMMARY:
==13630==    definitely lost: 0 bytes in 0 blocks
==13630==    indirectly lost: 0 bytes in 0 blocks
==13630==      possibly lost: 0 bytes in 0 blocks
==13630==    still reachable: 15,072 bytes in 526 blocks
==13630==         suppressed: 0 bytes in 0 blocks

我想向您展示整个代码,这就是为什么我不在这里粘贴它。请单击here以查看将在eclipse CDT中使用的代码。

代码的用途:基本上我已经重写了代码,允许zabbix服务器从远程机器中安装的zabbix代理获取系统值。我粘贴的这段代码在目录" / ZB_RQ"中创建了一个文件。带有请求的远程主机" vm.memory.size [available]"和zabbix代理将正确的值写回此文件中,并带有前缀"#"区分请求和响应。在这段代码中,我考虑过localhost" 127.0.0.1"作为测试的远程主机。该程序通过使用用户" zabbix"使用密码" bullet123",您可以从代码本身找到它。这个完整的操作是使用libssh2 API执行的。

开始之前:请创建一个目录" / ZB_RQ",用户" zabbix"密码" bullet123"并在Linux机器上安装libssh2-devel。

如何让这个程序完全运行:当你用valgrind运行这个程序时,(执行函数" sendViaSFTP"之后)你会发现有一个文件被创建在目录" / ZB_RQ"。程序等待3秒钟以将值返回到同一文件中。如果未找到,程序将创建一个具有相同期望的新文件。因此,在3秒内,从另一个终端,您必须在文件中写一个示例响应(例如" #test")。因此,您可以了解整个执行过程。

因此,当您终止整个执行(ctrl + c)时,valgrind将使用一个非常长的"可到达的块列表显示上述结果"。

我确保释放每个libssh2变量,但我仍然无法弄清楚为什么内存会持续下降。这是否因为堆积了可到达的块而发生了#34; ?

如果我考虑一下,这不会消耗所有内存,那么无论如何,请帮助我摆脱"可到达的街区"。

0 个答案:

没有答案