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);
};
要是'vector * _Devices;'是一個'vector _Devices;' - 不是指向vector的指針,而是像_DeviceProtocols這樣的指針向量? –
Apokal
這不是導致崩潰的聲明,它是如何使用聲明的變量。使用調試信息編譯您的程序(編譯時使用'-g'標誌),並在調試器中運行以查看崩潰發生的位置。 –
'm_DeviceIDs'應該是'int'而不是'bool'的數組嗎? – blackbird