我在代码中使用vector
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);
}
}
所以问题是
注意:我的项目中不允许使用第三方库,请为此提出纯c ++解决方案的建议。
答案 0 :(得分:8)
你的问题不是矢量的大小(虽然有实际的限制,但你离他们不远)。这很可能是由于代码中的某些错误在您创建更多对象时会暴露出来。
我建议在崩溃时检查堆栈跟踪,并将其添加到您的问题中。另一个好的策略是将代码减少到重现问题所需的绝对最小值 - 如果这无法帮助您找出问题 - 请在此处发布生成的代码。
答案 1 :(得分:7)
vector
中的元素将始终为4/8字节,具体取决于您是在32位还是64位系统上,因为您存储了指针。 2k记录将导致使用8kb / 16kb内存,因此5k将导致16kb / 32kb这应该不是一个问题(嵌入式系统不计算)。您的代码中很可能存在某个错误。
答案 2 :(得分:1)
您的std::vector
包含pointers
的小数字(5000)。这不太可能推动任何界限。
对不起。你的错误发生在另一座城堡里(我怀疑是标有m_pPacket
的城堡)。
答案 3 :(得分:1)
Mawby尝试使用对象池模式http://sourcemaking.com/design_patterns/object_pool?