C++ 如何从函数返回数组
我正在构建基于RPC的服务器客户端应用程序 我有一个名为event的结构,它包含: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
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)