远程过程调用清除
问题描述:
我的情况如下: 我已经在C中实现了一个简单的RPC系统,通过它客户端可以调用它传递命令的远程函数。该命令在远程机器上执行,并且包含输出的字符串返回给客户机。所以,函数签名是:远程过程调用清除
char* execute(char* command)
在这个函数里面,我为结果字符串做一个malloc并返回它。 该函数已发布,客户端可以调用它。 我的问题是:在每次远程过程调用后,我可以在服务器端释放分配的char *?
编辑:更详细地说明我的问题:这里的问题是,在第一次rpc调用之后,服务器崩溃时出现“glibc detected free()invalid pointer”错误。在执行过程中,我有这样的:
char* result = (char*) malloc(STRING_SIZE * sizeof(char));
...
return result;
我假设它试图和未能释放返回的结果。
答
这取决于使用哪种RPC机制。如果函数被正确标记,一些可以自动调用释放返回指针的函数。
如果您的RPC库无法做到这一点,则必须将malloc更改为其他内容。在单线程服务器中,您可以简单地将指针返回到多线程中的静态缓冲区......这取决于情况。
实际上,我的问题相当独立于代码:在服务器端如何对执行RPC调用分配的内存进行清理? – Tudor
为什么不是这样的函数:char * execute(char * command,char * output)将输出存储在_output_中并返回_output_。因此你不需要调用malloc。 – rendon
你说得对,这可能是一个解决方案,但RPC不允许在可调用过程中使用多个参数,除非我将它们打包在一个结构中。我会试试这个。 – Tudor