fixed bad alloc error when loading ASCII vector of references
This commit is contained in:
parent
8e90829546
commit
128b88838c
@ -317,11 +317,10 @@ std::istream& ObjectLoader::loadAscii(std::istream& is)
|
||||
}
|
||||
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); // [
|
||||
while(ss.peek() != ']')
|
||||
{
|
||||
vecRef.push_back(nullptr);
|
||||
if(ss.peek() == '{')
|
||||
{
|
||||
ss.ignore(1); // {
|
||||
@ -332,7 +331,7 @@ std::istream& ObjectLoader::loadAscii(std::istream& is)
|
||||
id.loadAscii(ss);
|
||||
ss.ignore(1); // }
|
||||
PendingReference ref;
|
||||
ref.ptr = &(vecRef.back());
|
||||
++nbRef;
|
||||
ref.type = type.getValueRef();
|
||||
ref.id = id.getValueRef();
|
||||
m_references.push_back(ref);
|
||||
@ -341,6 +340,12 @@ std::istream& ObjectLoader::loadAscii(std::istream& is)
|
||||
ss.ignore(6); // "null"
|
||||
if(ss.peek() == ',')
|
||||
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); // ]
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user