内存位置的另一个std :: bad_alloc

时间:2013-07-24 08:40:19

标签: c++

我搜索了这种错误并发现了很多。不幸的是没有线程真的帮助过我。

我有图像文件,我保存在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“行”中转换图像,其中包含所有这些信息。但这是如何工作的另一个问题。

Mark Ingram的答案正是我理解问题所需要的。谢谢你

编辑:哦,我看到我解释我的问题还不够。我没有图像,并在我的程序中加载它们。我有一个摄像机,它记录频率为50Hz的帧,所以在录制时我没有时间保存帧。

2 个答案:

答案 0 :(得分:8)

你的内存不足了。在32位系统上(至少在Windows上),您最多只能分配~2GB的内存。您只需在需要时动态加载数据,当您不再需要图像数据时,再将其丢弃。

实际上,限制将低于2GB,因为内存是以块的形式分配的(即,它不是连续分配的)。这意味着如果混合小型和大型对象分配,您将遇到堆碎片,这将大大减少您实际分配的内存量。

答案 1 :(得分:1)

将图像存储在一个文件夹中,一次加载一个。 动态内存分配是你的朋友。

通过将18,000张图像加在一起,我无法想到要完成任何事情。即使在超级计算机上也永远不会处理它。

相关问题