如何从函数返回一个数组

时间:2011-12-26 21:08:59

标签: c++ c client client-server

我正在构建基于RPC的服务器 - 客户端应用程序。

我有struct名为event,其中包含:

int type_id
long int time

我在服务器中有一个返回(event*)的函数:

event *
log_1_svc(event *argp, struct svc_req *rqstp)
{
    static event*  result;
result = (struct event*)malloc (3 * sizeof (struct event));
while (i <3)
        {
            result[i].type_id = i;
            result[i].time = i;
            i++;
        }
return &result

}

我想要的是使用此指针在客户端上接收结果。

以下是客户网站上的代码:

log_prog_1(char *host,int client_type,int type_id,long int time)
{

event  *result_1;

result_1 = log_1(&log_1_arg, clnt); // this calls the function in server and gurantee that the result is returned an address to pointer

int i =0;
        while (i<3)
        {
            printf ("Type: %d\n",result_1[i].type_id);
            printf ("Time: %ld\n",result_1[i].time);
            [CODE][/CODE]
            i++;
        }

}

此代码有效,但似乎它返回的地址不是值(客户端终端中显示的数字与服务器终端中的数字不同)。

我试图让服务器返回result

return result;

不是结果的地址(如前所述):

return &result;

虽然有效,但只有第一项在客户终端正确打印,其他两项是0。

请提前给我一个解决方案并提前致谢:)

2 个答案:

答案 0 :(得分:0)

一些评论:

  1. 有一个明显的内存泄漏(内存是malloc()'但永远不会释放()'d)。
  2. 我从未在log_1_svc中初始化
  3. struct *事件结果指针不需要是静态的
  4. log_1_svc返回struct **事件,而不是struct *事件(如上所述; by 顺便说一句,这将编译一个警告,有一个隐式指针强制转换。修正你的警告!)
  5. 为了解决你的问题,我会把我的赌注押在2上。

答案 1 :(得分:0)

我认为最好的方法是将指向内存的指针传递给要填充的三个struct event的函数。

void log_1_svc(event *argp, struct svc_req *rqstp, struct event *result)

这增加了一个额外的好处,即调用者可以只使用堆栈并避免任何内存泄漏。