分段错误CORBA C ++

时间:2014-04-07 18:00:19

标签: c++ segmentation-fault corba

我正在尝试构建一个CORBA应用程序,它具有以下IDL接口:

module Chat {
exception SesionNoIniciada{};
exception UsuarioNoRegistrado{};
exception ErrorServidor{};
exception SesionYaIniciada{};

interface Cliente{
    readonly attribute string nombre;

    oneway void nuevaSolicitudDeAmistad(in string c); //devuelve void, parametro string/char*
    oneway void actualizarListaAmigos();
    oneway void nuevoMensaje(in Cliente usuario, in string men);
};

typedef sequence<string> nombres;
typedef sequence<Cliente> clientes;

interface Servidor{
    nombres iniciarSesion(in Cliente usuario, in string pass) raises (UsuarioNoRegistrado, SesionYaIniciada);
    void cerrarSesion(in Cliente usuario, in string pass) raises (SesionNoIniciada);

    nombres getUsuariosRegistrados(in Cliente usuario, in string pass, in string nombre) raises (SesionNoIniciada);
    nombres getAmigos(in Cliente usuario, in string pass) raises (SesionNoIniciada);
    clientes getAmigosConectados(in Cliente usuario, in string pass) raises (SesionNoIniciada);
    void nuevaSolicitudDeAmistad(in Cliente amigo1, in string pass, in string amigo2) raises (UsuarioNoRegistrado, SesionNoIniciada);
    void aceptarSolicitudDeAmistad(in Cliente amigo1, in string pass, in string amigo2) raises (UsuarioNoRegistrado, SesionNoIniciada);
    void rechazarSolicitudDeAmistad(in Cliente amigo1, in string pass, in string amigo2) raises (UsuarioNoRegistrado, SesionNoIniciada);
    void eliminarAmistad(in Cliente amigo1, in string pass, in string amigo2) raises (UsuarioNoRegistrado, SesionNoIniciada);
};
};

以下方法在返回行中给出了分段错误:

nombres* Servidor_i::getAmigos(Cliente_ptr usuario, const char* pass){

vector<string> aux;
nombres_var result;
Cliente_ptr cliente;

try{
    aux=bd.listarAmigos(usuario->nombre()); //Gets names from DB (currently 0)
    result = new nombres(aux.size());
    for(int i=0; i<aux.size(); i++) //This for is not being executed, since size is 0
        result[i] = aux.at(i).c_str();
} catch(ErrorBD& e){
    throw ErrorServidor();
}
cout << "Ending" << endl;
return result._retn();
}

我认为它会与动态内存释放有关,但我还不习惯CORBA,所以我不确定我是否正确使用数据类型。

1 个答案:

答案 0 :(得分:0)

因为我不可能找出我的代码出了什么问题,并且产生了我所说过的分段错误;我想到了另一种解决问题的方法:我重建了IDL接口,以便函数有一个'out'参数,允许我返回一个没有任何问题的序列。