gpt4 book ai didi

c++ - gSOAP C++ 客户端内存泄漏

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:24 25 4
gpt4 key购买 nike

我已经阅读了 gSOAP 文档并看到提到应该调用 soap_destroy(soap) 和 soap_end(soap) 等这一事实,但是它们始终是对服务对象进行单次调用的示例。我使用的服务每次调用都会返回大约 40KB 的文本。我的问题是对于每个请求,内存使用量以大约相同的大小线性增长。我在 getWords 中添加了 soap_destroy(service->soap) 无济于事。谁能指出此代码片段中缺少哪些清理代码?请求程序应该连续运行几天,所以我担心的是每次请求清理而不是关闭时。

我在下面发布了一个基于 http://www.webservicex.net/WCF/ServiceDetails.aspx?SID=43 的类似示例(无错误检查) ,(它返回文本 block 对吗?)。非常感谢任何帮助!

#include "soapBibleWebserviceSoapProxy.h"
#include "BibleWebserviceSoap.nsmap"
#include <iostream>
extern "C" {
#include <unistd.h>
}

struct Service
{
BibleWebserviceSoap service;

std::string getWords(std::string &title, int chapter)
{
_ns1__GetBibleWordsByBookTitleAndChapter req;
_ns1__GetBibleWordsByBookTitleAndChapterResponse resp;
req.BookTitle = &title;
req.chapter = 1;

service.__ns2__GetBibleWordsByBookTitleAndChapter(&req, &resp);

return *(resp.GetBibleWordsByBookTitleAndChapterResult);
}
};

int main(int argc, char* argv[])
{
Service s;
std::string genesis("Genesis");
for (int i=0; i<360; ++i)
{
sleep(2);
std::cout << s.getWords(genesis,1) << std::endl;
}
return 0;
}

最佳答案

在 Valgrind(valgrind.org - 通常在 Linux 上默认安装)下运行您的应用程序 - 这是追踪内存泄漏的最简单方法。

进行 1,000 多次调用,然后在关机时您会看到泄漏。如果关闭时未显示泄漏,则某些列表或 map 会收集条目但仅在关闭时释放它们 - 在这种情况下使用 Massif(Valgrind 的一部分) - 它也是一个很好的工具。

这不是一个直接的答案,但占用内存的分配的堆栈跟踪通常有助于查明泄漏的原因。

关于c++ - gSOAP C++ 客户端内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3450441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com