【发布时间】:2014-04-21 11:34:30
【问题描述】:
我正在尝试使用 realloc 扩展一个指针数组,这是我的最小代码:
我用这段代码扩展了数组:
YCSImage ** tabImages = NULL;
for(int i=1;i<=5;i++)
{
tabImages = (YCSImage **)realloc(tabImages,i*sizeof(YCSImage *));
tabImages[i-1] = new YCSImage;
*(tabImages[i-1]) = Mat(Size(width,height), CV_8UC3, p_pixel_buffer);
}
并尝试使用以下代码访问数据:
for(int i=0;i<5;i++)
{
imwrite("../img"+to_string(i)+".png",*(tabImages[i]));
}
我没有遇到段错误或类似的问题,唯一的问题是 imwrite() 写入了我存储在扩展数组中的最后一个图像的 5 倍。 (好像对于我在 tabImages 中给出的任何索引,我得到唯一相同的图片 tabImages[4])
这段代码有什么问题?
[编辑]
我通过测试这个简单的代码发现它工作正常。问题在于 p_pixel_buffer 是一个指针,并且每次在循环中都会发生变化,图像也会发生变化。
【问题讨论】:
-
你有两个变量叫做
tabImages... -
我的错我更正了
-
什么是 YCSImage ?
-
顺便说一句,如果你使用 C++,你应该避免使用
realloc,而是使用std::vector,它会为你处理所有这些。 -
那你能给我们一个minimal complete example吗?
标签: c++ c arrays pointers opencv