Ошибка сегментации при возврате последовательности CORBA C++ Server Java Client

Я разрабатываю проект, в котором мне нужно реализовать сервер чата на C++ и клиенты чата на Java, используя Swing для реализации GUI.

У меня есть именно эта проблема, реализуя почти тот же проект:

Ошибка сегментации CORBA C++

Это часть моего 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();
}
Другие вопросы по тегам