std :: vector的最大大小

Chr*_*_vr 1 c++ stl

我在我的代码中使用向量

    std::vector<CEventLogInfo >

    class CEventLogInfo 
    { 
      // date and time
  unsigned short    m_sMonth;
  unsigned short    m_sDay;
  unsigned int  m_nYear;
  unsigned short    m_sHour;
  unsigned short    m_sMin;
  unsigned short    m_sSec;

  unsigned long m_nGatewayMacID;
  unsigned char m_byCommandType;
  unsigned char m_byStatus;
  unsigned char m_byEventName;
  unsigned char m_byDirection;
  unsigned short    m_nPacketLen;
  char*         m_pPacket;
     // ..some method 
 }
 CEventLogInfo::CEventLogInfo(const CEventLogInfo& refMessage)
 {      
m_sMonth        = refMessage.m_sMonth;
m_sDay          = refMessage.m_sDay;
m_nYear         = refMessage.m_nYear;
m_sHour         = refMessage.m_sHour;
m_sMin          = refMessage.m_sMin;
m_sSec          = refMessage.m_sSec;

m_nGatewayMacID = refMessage.m_nGatewayMacID;
m_byCommandType = refMessage.m_byCommandType;
m_byStatus      = refMessage.m_byStatus;
m_byDirection   = refMessage.m_byDirection;
m_byEventName   = refMessage.m_byEventName;
m_nPacketLen    = refMessage.m_nPacketLen;  
if ( m_nPacketLen!=0)
{
    m_pPacket       = new char[m_nPacketLen];
    memcpy(m_pPacket,refMessage.m_pPacket,m_nPacketLen);

}
else
    m_pPacket = NULL;

  }    


 void CEventLoggerBody::SetEventInfoList(EventInfoList& ListEventLog)
 {
EventInfoList::iterator itrEventLogInfo;
for ( itrEventLogInfo = ListEventLog.begin(); itrEventLogInfo != ListEventLog.end();itrEventLogInfo++)
{
    CEventLogInfo* pEventLogInfo = new CEventLogInfo(*itrEventLogInfo);


    m_ListEventLog.push_back(*pEventLogInfo);
}
 }
Run Code Online (Sandbox Code Playgroud)
  1. 这里m_nPacketLen是可变的,但不会超过22个字节.
  2. 这个载体是工作罚款2000记录(44*2000)88000个字节,但是当它超出了它crashing.I测试了它的5000条记录它在拷贝构造函数在崩溃时SetEventInfoList被调用.

所以问题是

  1. 它可以在其中保存信息的向量的最大容量是多少.
  2. 如果vector不支持这么多的字节,那么我应该使用什么STL容器.

注意:我的项目中不允许使用第三方库,请为此提供纯c ++解决方案的建议.

NPE*_*NPE 8

你的问题不是矢量的大小(虽然有实际的限制,但你离他们不远).这很可能是由于代码中的某些错误在您创建更多对象时会暴露出来.

我建议在崩溃时检查堆栈跟踪,并将其添加到您的问题中.另一个好的策略是将代码减少到重现问题所需的绝对最小值 - 如果这无法帮助您找出问题 - 请在此处发布生成的代码.


Xeo*_*Xeo 7

你的元素vector总是每个4/8字节,这取决于你是在32位还是64位系统,因为你存储指针.2k记录将导致使用8kb/16kb内存,因此5k将导致16kb/32kb这应该不是一个问题(嵌入式系统不计算).您的代码中很可能存在某个错误.