2013-12-17 61 views
1

我有一個類,當我嘗試添加在頭文件中聲明如下:C++的Linux:聲明一個類數組導致分段錯誤

bool m_DeviceIDs[100]; 

我得到一個分段錯誤。 任何想法爲什麼? 全班頭:

class Protocol 
{ 
    vector<ProtocolDevice*> _DeviceProtocols; 
    vector<Device>* _Devices; 
    Helper _Helper; 
    vector <unsigned char> m_MessageToSend;//xml messages to send 
    bool m_LockDevices; 
    //bool m_DeviceIDs[100]; 
    unsigned int GetVacantID(); 
public: 
    Protocol(void){}; 
    Protocol(vector<Device>* devices); 
    ~Protocol(void); 
    void RemoveDevice(int DeviceID); 
    void AddDevice(Device device); 
    bool SendPing(int DeviceID); 
    bool GetInputStatus(int DeviceID); 
    void GetLowLevelConfiguration(int DeviceID); 
    bool ActivateOutput(char outputID, bool state, int DeviceID); 
    bool ActivateBSUHF(unsigned char state, int DeviceID); 
    bool ActivateUnitLF(unsigned char state,int DeviceID); 
    void StartDeviceListeners(); 
    void WriteMessageToDevice(int DeviceID, unsigned char* message, int length); 
    vector<unsigned char> CollectDataFromDevice(int DeviceID,int dataLength); 
    int GetDeviceAvailableDataLength(int DeviceID); 
    void RefreshServerDetails(int DeviceID, string host, int port,int reconnectInterval); 
    void ReconnectHost(int DeviceID); 
    void SendVersion(int,bool); 
    void StartListentoDevice(int DeviceID); 
    void StopListenToDevice(int DeviceID); 
    bool SendSetLowLevelConfiguration(LowLevelConfiguration llConfig, int WaitAckMS,  bool FromBaseToLocator,int DeviceID); 
    bool OperateExciterRead(char operation, unsigned int ReaderID, int Retries,int DeviceID); 
    bool RequestConfigurationFromLocator(int ReaderID,int TimeOut, int Retries,int DeviceID); 
    void SendXMLMessage(unsigned char opcode, vector<unsigned char> XMLData,unsigned int MessageID, unsigned int SourceID, unsigned int DestID); 
    void Mute(int Length, int DeviceID); 
}; 
+1

要是'vector * _Devices;'是一個'vector _Devices;' - 不是指向vector的指針,而是像_DeviceProtocols這樣的指針向量? – Apokal

+4

這不是導致崩潰的聲明,它是如何使用聲明的變量。使用調試信息編譯您的程序(編譯時使用'-g'標誌),並在調試器中運行以查看崩潰發生的位置。 –

+1

'm_DeviceIDs'應該是'int'而不是'bool'的數組嗎? – blackbird

回答

1

代碼沒問題,你所展示的,但你可能想嘗試std::bitset而不是bool陣列,因爲它更versitile和空間effiecent,是這樣的:

#include <bitset> 
std::bitset<100> m_DeviceIDs; 
+0

事實上,它適用於bitset。我仍然想知道爲什麼它不適用於布爾值... – user1997268