簡體   English   中英

帶有QVector的bad_alloc但不帶有std :: vector

[英]bad_alloc with QVector but not with std::vector

我想這不是一個問題,而是一個征求意見的請求。

今天,我試圖將更大的數據集加載到軟件中,並遇到了一些錯誤的分配。

因此,相關代碼看起來像這樣。

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 ram的64位linux。 因此,這應該不是問題。

因此,這將引發bad_alloc異常。 現在,如果我將QVector更改為std :: vector,則可以使用。 有人可以對此發表評論嗎?

如果不看QVector的定義,我將猜測是因為Qt使用int表示大小。

向量的大小足夠大,以至於int會溢出,因此分配失敗。

std::vector做正確(和理智)的事情,並使用size_t表示大小,因此不會溢出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM