Ошибка сегментации при возврате последовательности CORBA C++ Server Java Client
Я разрабатываю проект, в котором мне нужно реализовать сервер чата на C++ и клиенты чата на Java, используя Swing для реализации GUI.
У меня есть именно эта проблема, реализуя почти тот же проект:
Это часть моего IDL, где проблема заключается в:
typedef sequence<ICliente> ListaClientes;
interface IServer
{
attribute ListaClientes lista;
void registrar_usuario (in ICliente cliente) raises (usuarioRegistrado);
IConversacion crear_conversacion (in ICliente cliente);
ListaClientes obtener_lista();
void dar_baja(in ICliente cliente);
};
И вот часть кода, где я получаю ошибку сегментации, это:
ListaClientes* Server_i::obtener_lista() {
return userList._retn();
}
Куда:
ListaClientes_var userList=new ListaClientes(size);
Или же:
ListaClientes* userList=new ListaClientes(size);
ListaClientes* Server_i::obtener_lista() {
return userList;
}
1 ответ
Решение
Так должно быть
ListaClientes* Server_i::obtener_lista() {
ListaClientes_var my_list = new ListaClientes(size);
my_list->length (size);
// Fill the elements in the newly created sequence by doing a duplicate of each object reference as it exists in the member variable
for(CORBA::ULong i=0;i<userList->length();i++){
my_list[i] = ICliente::_duplicate(userList[i]);
}
return my_list._retn();
}