Я использовал 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 я нашел сегментациюошибка генерируется в функции xdr_u_char (), вызываемой my_remote_call ().Мой вопрос:
в первом случае строка Hello выделяется компилятором в разделе .rodata, а во втором - часть кучи используется для запоминания строки.Может ли ошибка сегментации быть сгенерирована, потому что подпись xdr_u_char требует явно
char*
, а не
const char*
, как вы можете видеть здесь ?Таким образом, в данном случае означает, что функция xdr_u_char () изменяет мои данные?