gpt4 book ai didi

C++-gsoap : Parameter passing memory management issues

转载 作者:太空狗 更新时间:2023-10-29 23:10:23 25 4
gpt4 key购买 nike

我正在为其编写 Web 服务器和客户端测试 stub 。我对参数的内存管理有疑问。

我从我的客户那里调用了一个 soap 函数 ns1_func1(input * pInput, output* pOutput)现在输入和输出类都包含指向其他结构的指针。

例如

类输出{ 类 abc * p1; 定义类* p2;};

我的问题是 - 谁负责内存分配?客户端负责输入内存分配,服务器负责输出内存管理吗?

现在我的客户端代码看起来像这样

client_fn()
{

...

input inp1;
output * pOutput = NULL;
ns1_func1(&inp1, pOutput);
if(pOutput == NULL)
{
cout<<"pOut is NULL\n";
return ERR;
}
else
{
// retrive output values from pOutput
}

...
}

尽管使用 soap_new_Output(soap, -1) 从服务器分配 pOutput,但在调用 ns1_func1 后,我总是将 pOutput 设置为 NULL。

此外,我的理解是我们应该使用 soap_new_X 来分配内存,当我们调用 soap_destroy 时,内存会自动释放。如果我错了,请纠正我。

基本上,在这种情况下,我不知道应该由谁负责内存分配/解除分配。

任何帮助都会很棒。

最佳答案

因为客户端和服务端一般是不同的进程,或者说是不同的机器,各自负责自己的内存管理。客户端必须为其输入参数分配内存,然后 gsoap 将其序列化以发送到服务器。

服务器反序列化输入参数,分配所需的内存。它为其输出分配内存,gsoap 将其序列化以发送回客户端。客户端反序列化服务器的响应,分配它需要的任何内存。

您肯定需要使用 soap_malloc(等)进行内存分配,这是 gsoap 库跟踪 SOAP 调用清理时需要释放的内容的唯一方法。

在您提供的特定 ns1_func1 示例中,服务器分配响应,生成的客户端代码应该分配它需要的任何内存。该调用的 WSDL 中可能有问题,生成的客户端代码不是您所期望的。

关于C++-gsoap : Parameter passing memory management issues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/387142/

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