C++Linux:在类中声明数组会导致分段错误

C++ Linux: Declaring an array in a class causes segmentation fault

本文关键字:分段 错误 数组 声明 C++Linux      更新时间:2023-10-16

我有一个类,当我尝试在头文件中添加以下声明时:

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);
};

您显示的代码没有问题,但您可能想尝试std::位集而不是bool数组,因为它更具多样性和空间效率,比如:

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