1

我想这不是一个问题,而是一个征求意见的请求。

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

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

QVector<float>verts;
try
{
    verts.reserve( numPoints * 6 );
}
catch ( std::bad_alloc& )
{
    qDebug() << "error";
}

在这种情况下 numPoints 是 92911773 所以它会尝试分配 numpoints * 6 * sizeof( float ) = 2,214,922,152 字节。我的机器运行具有 12Gb 内存的 64 位 linux。所以这应该不是问题。

所以这会引发 bad_alloc 异常。现在,如果我将 QVector 更改为 std::vector 它可以工作。任何人都可以对此发表评论吗?

4

2 回答 2

1

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

您的向量的大小足够大,以至于 int 会溢出,因此分配失败。

std::vector做正确(和理智)的事情,并使用 asize_t来表示大小,所以它不会溢出。

于 2013-11-08T11:59:44.367 回答
0

它已在 Qt6 中得到修复:所有容器都有 64 位大小。
https://doc-snapshots.qt.io/qt6-dev/qlist.html#more-information-on-using-qt-containers

于 2021-09-08T16:15:22.007 回答