【问题标题】:Segmentation fault CORBA C++分段错误 CORBA C++
【发布时间】:2014-05-21 02:06:07
【问题描述】:

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

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,所以我不确定我是否以正确的方式使用数据类型。

【问题讨论】:

    标签: c++ segmentation-fault corba


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      相关资源
      最近更新 更多