Я думаю, это не столько вопрос, сколько просьба о комментариях.
Сегодня я пытался загрузить больший набор данных в свое программное обеспечение и столкнулся с парой неверных ресурсов.
Таким образом, рассматриваемый код выглядит следующим образом.
QVector<float>verts;
try
{
verts.reserve( numPoints * 6 );
}
catch ( std::bad_alloc& )
{
qDebug() << "error";
}
numPoints в этом случае — 92911773, поэтому он попытается выделить numpoints * 6 * sizeof (float) = 2,214,922,152 байта. Моя машина работает под управлением 64-битной Linux с оперативной памятью 12 ГБ. Так что это не должно быть проблемой.
Так что это вызывает исключение bad_alloc. Теперь, если я изменю QVector на std :: vector, он будет работать. Кто-нибудь может прокомментировать это?
Не глядя на определение QVector
, Я собираюсь догадаться, что это потому, что Qt использует int
представлять размер.
Размер вашего вектора достаточно велик, так что int будет переполнен, поэтому выделение будет неудачным.
std::vector
делает правильные (и вменяемые) вещи, и использует size_t
представлять размер, чтобы он не переполнялся.
Других решений пока нет …