C扩展一个指针数组
Posted
技术标签:
【中文标题】C扩展一个指针数组【英文标题】:C extend a pointer array 【发布时间】: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吗?
【参考方案1】:
您正在使用相同的数据p_pixel_buffer
初始化所有 5 个图像。以后要修改吗?
【讨论】:
事实上,p_pixel_buffer 会随着我循环中的每个 i 发生变化。对不起,我试图总结并避免细节,但它一定会让你感到困惑。 你为什么realloc
它5次?最好使用 stl 容器(这也可以避免调用 new),或者只分配一次。
@Chabloz:那么最可能的解释是旧指针仍然直接或间接指向它。
你可以尝试在 realloc 行之后打印p_pixel_buffer
。
@Beta:是的,我可能是这么想的,但我不知道为什么要诚实以上是关于C扩展一个指针数组的主要内容,如果未能解决你的问题,请参考以下文章
C 语言数组 ( 数组指针 | 数组指针定义 | 使用 数组指针类型 定义数组指针 )