bad_alloc与QVector但不与std :: vector

时间:2013-11-08 11:56:35

标签: c++ qt4.8

我想这不是一个问题,而是一个评论请求。

今天我试图将更大的数据集加载到我的软件中,并遇到了一些错误的分配。

所以有问题的代码看起来像这样。

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就可以了。有人可以对此发表评论吗?

1 个答案:

答案 0 :(得分:1)

不看QVector的定义,我猜是因为Qt使用int来表示大小。

你的向量大小足以使int溢出,因此分配失败。

std::vector执行正确(且理智)的操作,并使用size_t来表示大小,因此它不会溢出。