【发布时间】:2011-10-01 16:38:14
【问题描述】:
我的情况如下: 我在 C 中实现了一个简单的 RPC 系统,客户端可以通过该系统调用它传递命令的远程函数。该命令在远程机器上执行,并将包含输出的字符串返回给客户端。所以,函数签名是:
char* execute(char* command)
在这个函数中,我为结果字符串做一个 malloc 并返回它。 该功能已发布,客户可以调用它。 我的问题是:在每次远程过程调用之后,我可以通过哪种方式在服务器端释放分配的 char*?
编辑:更详细地说明我的问题:这里的问题是在第一次 rpc 调用之后,服务器因“glibc 检测到 free() 无效指针”错误而崩溃。在执行过程中,我有类似的东西:
char* result = (char*) malloc(STRING_SIZE * sizeof(char));
...
return result;
我假设它正在尝试释放返回的结果,但未能成功。
【问题讨论】:
-
实际上,我的问题与代码无关:如何在服务器端对通过 RPC 调用分配的内存进行清理?
-
为什么不用这样的函数:char* execute(char* command, char* output) 将输出存储在output 并返回output。因此,您无需调用 malloc。
-
你是对的,这可能是一个解决方案,但是 RPC 不允许在可调用过程中使用多个参数,除非我将它们打包在一个结构中。我会试试这个。
-
啊,我不知道。如果您将输出存储在 char* 命令中,我认为这不是一个好习惯,但它可以工作。
-
您是从头开始编写 RPC 系统的吗?这样做,您必须注册一个客户端可以调用的函数和一个清理函数,RPC 运行时在完成请求时调用该函数,在该函数中进行所需的清理。
标签: c memory-management malloc free rpc