0

私はこのコードを持っています:

class USerializer {
public:
    template<typename T>
    static std::string serialize(std::list<T*> listOfObjectToSerialize)
    {
        // stringstream containing serialized Objects
        std::stringstream serializedObjectList;

        typename std::list<T*>::iterator iter;

        // serialize Objects
        for (iter = listOfObjectToSerialize.begin(); iter != listOfObjectToSerialize.end(); ++iter)
        {
            // Class delimiter
            serializedObjectList << '+'<< endl;

            // Need to serialise the class itself, and not the pointer to it!
            serializedObjectList << **iter;
        }

        return serializedObjectList.str();
    }
}

そして、私はこのような方法を使用します:

std::string serializedAlarmInfo = USerializer::serialize<CcAlarm::AlarmInfo>(getActiveAlarms());

SIGILL障害が発生しています:

Program received signal SIGILL, Illegal instruction.

gdbを使用して実行をトレースしましたが、シリアル化関数を終了するまではすべて問題ないようです。

何か案は?

4

1 に答える 1

1

試す:

if ((*iter) == NULL)
{    throw std::runtime_error("Was not expecting that");
}
// Or use some other technique to compensate for a NULL pointer.
serializedObjectList << **iter;
于 2012-12-18T23:24:33.760 に答える