Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从函数返回数组_C++_C_Client_Client Server - Fatal编程技术网

C++ 如何从函数返回数组

C++ 如何从函数返回数组,c++,c,client,client-server,C++,C,Client,Client Server,我正在构建基于RPC的服务器客户端应用程序 我有一个名为event的结构,它包含: int type_id long int time 我在服务器中有一个函数返回事件*: 不是前面写的结果地址: return &result; 它工作正常,但只有第一项在客户端终端中正确打印,其他两项为0 请为我提供解决方案,并提前感谢:几句话: 有一个明显的内存泄漏内存是malloc'd,但从来没有空闲过。 我从未在log_1_svc中初始化 struct*事件结果指针不需要是静态的 log_1_s

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

我有一个名为event的结构,它包含:

int type_id
long int time
我在服务器中有一个函数返回事件*:

不是前面写的结果地址:

return &result;
它工作正常,但只有第一项在客户端终端中正确打印,其他两项为0

请为我提供解决方案,并提前感谢:

几句话:

有一个明显的内存泄漏内存是malloc'd,但从来没有空闲过。 我从未在log_1_svc中初始化 struct*事件结果指针不需要是静态的 log_1_svc返回struct**事件,而不是如上所述的struct*事件;通过 通过这种方式,这将在编译时警告存在隐式指针强制转换。修正你的警告!
为了解决您的问题,我将赌注押在2上。

我认为最好的解决方法是将指向内存的指针传递到要填充的three struct事件的函数中

i、 e


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

此代码不会编译:返回&result,类型为event**。请发布一些真实的代码。另外,你不能让它工作的原因是,你的客户端和服务器可能是两个独立的进程,因此会有独立的地址空间。一个人看不到另一个人的记忆。如果要传输原始指针,则需要查看共享内存。@OliCharlesworth,即使使用共享内存,内存块也不可能位于同一地址。您希望使用偏移量而不是原始指针进入共享内存块。此外,函数返回时,函数中定义的所有变量都会被物理销毁,因此event*result_1变量仅在函数运行时占用内存。一旦控件返回main,您将得到一个指向未定义内容的内存位置的指针。@LokiAstari:它是指向静态变量的指针,而静态变量又是指向动态分配内存的指针。这里没有什么超出范围。
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++;
        }

}
return result;
return &result;
void log_1_svc(event *argp, struct svc_req *rqstp, struct event *result)