我试图传递一些可变参数,但我没有成功。
代码:
void Dispositivo::enviarComandoPTZ( AcaoPTZEnum in_acao, DirecaoPTZEnum in_direcao )
{
std::string direcao = direcaoPTZMap[in_direcao];
std::string acao = StringUtil::to_string(in_acao);
char* buf = ByteUtil::hexStringToRawBytes( ComandoUtil::gerarComando( PTZ, m_sessao, acao.c_str(), direcao.c_str(), "4") ); // IT CRASHES HERE
int len = sizeof(buf);
m_pSocket->Write( buf, len );
}
std::string ComandoUtil::gerarComando(TipoComandoEnum in_tipo, std::string in_sessao, ...)
{
va_list parametros;
va_start ( parametros, in_sessao );
std::string payload = obterPayload(in_tipo,parametros);
Requisicao requisicao = Requisicao(in_tipo, payload, in_sessao);
return requisicao.gerarDados();
}
std::string ComandoUtil::obterPayload( TipoComandoEnum tipo, va_list parametros)
{
return (wxString::FormatV(_(payloadMap[tipo]),parametros)).ToStdString();
}
payloadMap是一个包含我需要格式化的字符串的映射。
我在enviarComandoPTZ()的第3行遇到了分段错误;
答案 0 :(得分:0)
看看this。也许你的字符串大于1024个符号?
可能是因为ToStdString
:std::string
的实现不等于wxWidget的实现。试着打电话:
return (wxString::FormatV(_(payloadMap[tipo]),parametros)).c_str();
将此调用分解为此类步骤
wxString str = payloadMap[ tipo ];
wxString fmt = _( str ); // BTW, what is this ?
wxString res = wxString::FormatV( fmt, parametros );
return res.c_str();
并使用调试器
运行它答案 1 :(得分:0)
问题与可变参数无关。其中一个函数参数(m_sessao)无法访问,因为对象Dispositivo为null。
我花了一段时间才注意到这一点,因为我已经习惯了Java,我期待任何“nullpointerexception”发生,如果我试图访问一个null对象的函数,而不是在尝试访问该属性之后;一旦我调用的函数进入“Dispositivo”并且它不是静态的,我认为它不是空的。
感谢那些试图提供帮助的人。我有一些很好的技巧来修复代码。