C++ C++;服务器崩溃有时会发出信号

C++ C++;服务器崩溃有时会发出信号,c++,debugging,crash,C++,Debugging,Crash,我的发球手有时在球员走动时会崩溃。 我试图用调试器运行它,但服务器出现错误:程序收到信号SIGILL,指令非法 它显示LogicHandler中的第59行。 这是函数运行。 以下是该函数: void LogicHandler::run() { try { unsigned short packetID = (packet->getGroup() * 666) + packet->getType(); switch (packetID)

我的发球手有时在球员走动时会崩溃。 我试图用调试器运行它,但服务器出现错误:程序收到信号SIGILL,指令非法

它显示LogicHandler中的第59行。 这是函数运行。 以下是该函数:

void LogicHandler::run()
{
    try
    {
        unsigned short packetID = (packet->getGroup() * 666) + packet->getType();

        switch (packetID)
        {
        case 666:
            handleQuit();
            break;
        case 670:
            handleLogin();
            break;
        case 672:
            handleCreateCharacter();
            break;
        case 673:
            handleDeleteActor();
            break;
        case 675:
            handleSelectCharacter();
            break;
        case 1345:
            handleMove(); <- HERE OCCURS SIGILL
            break;
        case 11332:
            if(!connection.isLogged())
            {
                throw Poco::Exception("Unlogged access.");
            }
            connection.sendPing();
        default:
            if(!connection.isLogged())
            {
                throw Poco::Exception("Unlogged access.");
            }
            connection.sendPing();
            break;
        }
    }
    catch(...)
    {
        connection.shutdownConnection();
    }
    delete this;
}
void LogicHandler::run()
{
尝试
{
无符号短packetID=(packet->getGroup()*666)+packet->getType();
交换机(packetID)
{
案例666:
handleQuit();
打破
案例670:
handleLogin();
打破
案例672:
handleCreateCharacter();
打破
案例673:
handleDeleteActor();
打破
案例675:
handleSelectCharacter();
打破
判例1345:

handleMove()似乎您的问题完全在别处。如果您使用带有虚拟函数的类,则可能是您没有正确处理内存并覆盖类,因此调用了未定义的指令。请使用
valgrind
等工具清理内存写入。

Sigill表示您正在损坏内存通过在调用之前的某个点用数据覆盖函数handleMove()地址处的内存,查找缓冲区溢出。因此,您尝试执行的不是handleMove(),而是作为代码没有意义的数据,因此SIGILL

在您的环境中,是否可以选择使用electric fence进行编译?如果不是,请使用调试器小心地逐步执行。并在写入函数handlemove地址处的内存时中断