远程过程调用清除

问题描述:

我的情况如下: 我已经在C中实现了一个简单的RPC系统,通过它客户端可以调用它传递命令的远程函数。该命令在远程机器上执行,并且包含输出的字符串返回给客户机。所以,函数签名是:远程过程调用清除

char* execute(char* command) 

在这个函数里面,我为结果字符串做一个malloc并返回它。 该函数已发布,客户端可以调用它。 我的问题是:在每次远程过程调用后,我可以在服务器端释放分配的char *?

编辑:更详细地说明我的问题:这里的问题是,在第一次rpc调用之后,服务器崩溃时出现“glibc detected free()invalid pointer”错误。在执行过程中,我有这样的:

char* result = (char*) malloc(STRING_SIZE * sizeof(char)); 
... 
return result; 

我假设它试图和未能释放返回的结果。

+0

实际上,我的问题相当独立于代码:在服务器端如何对执行RPC调用分配的内存进行清理? – Tudor

+0

为什么不是这样的函数:char * execute(char * command,char * output)将输出存储在_output_中并返回_output_。因此你不需要调用malloc。 – rendon

+0

你说得对,这可能是一个解决方案,但RPC不允许在可调用过程中使用多个参数,除非我将它们打包在一个结构中。我会试试这个。 – Tudor

这取决于使用哪种RPC机制。如果函数被正确标记,一些可以自动调用释放返回指针的函数。

如果您的RPC库无法做到这一点,则必须将malloc更改为其他内容。在单线程服务器中,您可以简单地将指针返回到多线程中的静态缓冲区......这取决于情况。