我想这不是一个问题,而是一个评论请求。
今天我试图将更大的数据集加载到我的软件中,并遇到了一些错误的分配。
所以有问题的代码看起来像这样。
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和12Gb内存。所以这应该不是问题。
因此抛出bad_alloc异常。现在如果我将QVector更改为std :: vector就可以了。有人可以对此发表评论吗?
答案 0 :(得分:1)
不看QVector
的定义,我猜是因为Qt使用int
来表示大小。
你的向量大小足以使int溢出,因此分配失败。
std::vector
执行正确(且理智)的操作,并使用size_t
来表示大小,因此它不会溢出。