簡體   English   中英

分配新向量時std :: bad_alloc - 我該怎么辦

[英]std::bad_alloc when allocating a new vector - what can I do

我有個問題。 我有一個巨大的c ++項目,我在幾點改變以滿足我的要求。 我加載了比預期更多的數據,並且在該程序的某個時刻,有一個新的向量分配了數據的大小乘以另一個數字。

vector = new real[data.size()*28];

在這里我收到錯誤消息:

terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

因為我無法分配那么多空間。 我無法更改此向量,因為它在程序的許多不同部分中使用,並且(對我來說)可能不可能在此處將其余程序擬合到新定義中。

我能做什么,我可以使用這個向量,但我的大數據集?

順便說一句:我使用eclipse,也許我可以增加在eclipse本身分配的可能空間的大小?

謝謝!

正如Encryptyon指出的那樣(並且他應該得到信用),你需要將你的內存分配為一個非連續的塊。 你可以使用std::deque來做到這一點。

std::deque<float> v( data.size() * 28 );

您可以使用operator[]訪問任何成員。

real x = v[1000000];

你也可以迭代(部分)deque,好像它是一個std::vector因為std::deque的接口與std::vector非常相似。 但是,你不能做的是&v[0] (或c ++ 11中的v.data() ),因為容器的內部存儲很可能是非連續的。

你不能分配那么多連續的ram,使用雙端隊列

暫無
暫無

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

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