我使用rpcgen为我正在开发的程序生成客户端和服务器存根。因此,存根使用XDR封装数据并通过网络发送。当我执行这段代码时,会抛出一个分段错误:
char *str = "Hello!";
my_remote_call(str, strlen(str));
相反,如果我以这种方式修改它没有问题:
char *str = "Hello!";
char *str2 = (char*) malloc(strlen(str));
memcpy(str2, str, strlen(str));
my_remote_call(str2, strlen(str2));
使用GDB,我发现分段错误是在my_remote_call()调用的xdr_u_char()函数中生成的。我的问题是:
在第一种情况下,Hello字符串由编译器在.rodata部分中分配,而在第二种情况下,堆的一部分用于记忆字符串。可能会生成分段错误,因为xdr_u_char签名需要显式
char*
而不是
const char*
你可以看到here?那么在这种情况下意味着xdr_u_char()函数会改变我的数据吗?
答案 0 :(得分:0)
我相信它正在接收数据,而不是发送数据。您确定远程呼叫确实在XDR_ENCODE
模式下使用XDR吗?
答案 1 :(得分:0)
要将字符串传输到XDR,您应使用xdr_string
而不是xdr_u_char
;向我们展示*.x
的{{1}}文件...