动态分配QImage数组

时间:2014-06-30 13:37:57

标签: c++ c arrays qt4 qimage

我需要为QImage数组分配动态内存。

它在Linux中对我有用:

void Arrange_Images(int numOfCams, int numBoards)
{
     QImage * array_of_images[numOfCams*numOfBoards];
     .
     .
     .
 }

但Windows无法解决此问题,并将其标记为错误。 对于标准数组,我可以使用malloc,但这是一个QImage数组。 在此之后,每个单元将由图像填充以进行重新排序和进一步处理。 谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

我认为Visual Studio编译器仍然无法在堆栈上分配动态内存量(我认为C ++ 03并没有允许这样做,但C99确实如此)。您可以使用_malloca作为模拟。或者只是在Windows上切换到使用gcc

答案 1 :(得分:0)

问题是你的动态数组并不是真正动态的。

array_of_images 是指向QImage对象的指针的静态数组,并且必须在编译时知道静态数组的大小 - 在您的情况下,这个大小是未知的,因为数组的大小取决于关于 Arrange_Images()函数的输入参数。

如果要创建动态分配的QImage对象数组,则应采用以下方式:

QImage* array_of_images = new QImage[numOfCams*numOfBoards];

我还会考虑你是否真的需要一个动态分配的数组,而不能用std :: vector代替它。

如果Linux编译器确实以这种形式允许它,我不确定为什么在我看来它不应该编译。

答案 2 :(得分:0)

为了让它快速运作,请尝试使用此行而不是现在的行:

std::vector<QImage*> array_of_images(numOfCams*numOfBoards);

当然,你也需要#include <vector>。其余的代码应该保持一致,因为当std::vector超出范围时,{{1}}将自行取消分配(但不是指针指向的东西!),就像你当前的C风格数组一样。