2013-07-24 53 views
2

我搜索了這種錯誤,發現很多。不幸的是沒有線程真的幫助我。內存位置的另一個std :: bad_alloc

我有我保存在arrayvector或什麼的圖像文件。

經過約1.8 GB(〜1439圖像)後,出現內存位置的錯誤std::bad_alloc。所以我試圖以不同的方式宣佈array,但每次發生同樣的錯誤。

Image* img; 
Image img[180000]; 
Image* img = new Image[180000] 

vector<Image> img; 

(180k將是1分鐘的幀)。記錄1分鐘並不重要,但保存超過1439幀將會很好。或者至少要理解爲什麼會出現這個錯誤,或者說爲什麼它發生在1.8 GB。

也許有人可以幫我解釋一下嗎?

PS:我使用的是32位系統


的問題是,時間將圖像保存的文件夾或一些需要長期。也許我必須找到一種壓縮方式,它可以讓我只保存陣列中圖像的必要信息,然後在完成後恢復幀。

我聽說你可以轉換一個圖像,只是在一個X和一個Y「行」,其中包含所有這些信息。但這是如何工作的另一個問題。

馬克英格拉姆的答案正是我需要理解的問題。謝謝你

編輯:哦,我看到我解釋我的問題不夠。我沒有圖像並將它們加載到我的程序中。我有一個攝像頭,記錄幀的頻率爲50Hz,因此在錄製時我沒有時間保存幀。

+2

不超過1.8GB的連續內存分配'img [180000]'。這裏的所有都是它的。 – Jon

+2

你是否真的需要同一時間的所有圖像? – doctorlove

回答

8

您已經耗盡內存。在32位系統上(至少在Windows上),最多隻能分配大約2GB的內存。只有在需要時才需要動態加載數據,而當不再需要圖像數據時,請再次將其丟棄。

實際上,由於內存是按塊分配的(即,它沒有連續分配),因此限制將低於2GB。這意味着如果您混合使用小型和大型對象分配,您將會遇到堆碎片,並且這會大幅減少您實際分配的內存量。

+0

是不是更接近4GB?(2^32 = 4'294'967'296) – Dahaka

+4

@Dahaka不,在Windows上,您只能在一個進程中分配2GB。看到這裏 - > http://msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85).aspx(Windows版本的內存限制) –

0

將圖像存儲在一個文件夾中並一次加載一個。 動態內存分配是你的朋友。

我無法想象通過將18,000個圖像加載在一起來完成。即使在超級計算機上,您也永遠不會處理它。

相關問題