【问题标题】:C extend a pointer arrayC扩展一个指针数组
【发布时间】: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


【解决方案1】:

您正在使用相同的数据p_pixel_buffer 初始化所有 5 个图像。以后要修改吗?

【讨论】:

  • 事实上,p_pixel_buffer 会随着我循环中的每个 i 发生变化。对不起,我试图总结并避免细节,但它一定会让你感到困惑。
  • 你为什么realloc它5次?最好使用 stl 容器(这也可以避免调用 new),或者只分配一次。
  • @Chabloz:那么最可能的解释是旧指针仍然直接或间接指向它。
  • 你可以尝试在 realloc 行之后打印p_pixel_buffer
  • @Beta:是的,我可能是这么想的,但我不知道为什么要诚实
猜你喜欢
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 2015-11-08
  • 2014-02-26
  • 2011-05-24
  • 1970-01-01
相关资源
最近更新 更多