[英]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.