【发布时间】:2011-11-06 19:35:34
【问题描述】:
我使用 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() 函数更改了我的数据?
【问题讨论】:
标签: pointers segmentation-fault xdr