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 语言数组 ( 数组指针 | 数组指针定义 | 使用 数组指针类型 定义数组指针 )

C语言 如何定义一个二维指针数组?

C语言中的二维数组名是一个二重指针吗?

C语言 指针数组与数组指针

当我尝试重新分配()结构指针数组时,为啥我的 C 程序会崩溃?

C语言数组指针函数指针函数指针数组