fixed bad alloc error when loading ASCII vector of references

This commit is contained in:
Anselme 2017-03-08 18:03:20 +01:00
parent 8e90829546
commit 128b88838c

View File

@ -317,11 +317,10 @@ std::istream& ObjectLoader::loadAscii(std::istream& is)
} }
else if(p->getPropertyType() == AbstractProperty::ARRAY && ((AbstractArrayProperty*)p)->getDataType() == AbstractProperty::REFERENCE) else if(p->getPropertyType() == AbstractProperty::ARRAY && ((AbstractArrayProperty*)p)->getDataType() == AbstractProperty::REFERENCE)
{ {
std::vector<Serializable*> &vecRef = ((ArrayProperty<Serializable*>*)p)->getValueRef(); int nbRef = 0;
ss.ignore(1); // [ ss.ignore(1); // [
while(ss.peek() != ']') while(ss.peek() != ']')
{ {
vecRef.push_back(nullptr);
if(ss.peek() == '{') if(ss.peek() == '{')
{ {
ss.ignore(1); // { ss.ignore(1); // {
@ -332,7 +331,7 @@ std::istream& ObjectLoader::loadAscii(std::istream& is)
id.loadAscii(ss); id.loadAscii(ss);
ss.ignore(1); // } ss.ignore(1); // }
PendingReference ref; PendingReference ref;
ref.ptr = &(vecRef.back()); ++nbRef;
ref.type = type.getValueRef(); ref.type = type.getValueRef();
ref.id = id.getValueRef(); ref.id = id.getValueRef();
m_references.push_back(ref); m_references.push_back(ref);
@ -341,6 +340,12 @@ std::istream& ObjectLoader::loadAscii(std::istream& is)
ss.ignore(6); // "null" ss.ignore(6); // "null"
if(ss.peek() == ',') if(ss.peek() == ',')
ss.ignore(1); // , ss.ignore(1); // ,
std::vector<Serializable*> &vecPtrs = ((ArrayProperty<Serializable*>*)p)->getValueRef();
vecPtrs = std::vector<Serializable*>(nbRef, nullptr);
int begin = m_references.size() - nbRef;
for(int i=0; i<nbRef; ++i)
m_references[begin + i].ptr = &(vecPtrs[i]);
} }
ss.ignore(1); // ] ss.ignore(1); // ]
} }