SIGILL bei va_start



  • Hallo ich habe folgende Funktion:

    ERRNO cGenericDevice::SendCommand(unsigned _Direction, unsigned _Command, ...)
    {
        m_Command.clear();
    
        if (SendENQ())
        {
             return ERR_NAK;
        }
    
        if (ReceiveACK())
        {
             return ERR_NAK;
        }
    
        unsigned CommandSize;
        unsigned checksum = 0xff;
    
        m_Command.push_back(STX);
    
        m_Command.push_back(_Direction);
        CommandSize++;
        checksum -= _Direction;
    
        m_Command.push_back(_Command);
        CommandSize++;
        checksum -= _Command;
    
        va_list morebytes;
        va_start(morebytes, _Command);
        unsigned char tempbyte;
    
        for (;;)
        {
            tempbyte = va_arg(morebytes, unsigned char);
    
            if (tempbyte == '\0')
            {
                break;
            }
    
            m_Command.push_back(static_cast<unsigned>(tempbyte));
            CommandSize++;
            checksum -= tempbyte;
        }
    
        va_end(morebytes);
    
        if (SendByte(CommandSize))
        {
            return ERR_NAK;
        }
    
        checksum -= CommandSize;
    
        m_Command.push_back(checksum);
        m_Command.push_back(ETX);
    
        if (SendByteVector(m_Command))
        {
            return ERR_NAK;
        }
    
        return ERR_OK;
    }
    

    Ich verwende g++-4.3. Das Programm bricht bei va_start mit einem SIGILL ab.
    Ich kann in meinem Code aber keinen Fehler entdecken.
    Was mach ich falsch?


Anmelden zum Antworten