每次发生更改时,我都会从线程获取一个指向原始图像数据的指针,并且我希望在另一个线程使用它之前复制它。如果我不知道原始数据的大小,我怎样才能实现这一点,因为它随机选择一个大小并提供原始数据?如何从此指针复制原始数据?
答案 0 :(得分:0)
要复制原始指针“data”,您需要其他信息:此数据的大小。原始数据指向图片,因此您在创建时已经拥有width
和height
;如果这不是8位/像素图像,您可能还有bpp
(每像素字节数)。将这三者相乘可以得到原始数据大小。
目前,您只转发原始数据的地址。要访问其他变量,您还需要转发其余变量。
一个选项(根据我的评论)是将malloc
原始数据大小扩展为存储width
和height
(以及可选地,bpp
)所需的大小并在一开始就存储它们。
更好的方法(因为更易于管理)是创建struct
:
struct myData_t {
int width;
int height;
void *data;
} myData, *myDataPtr;
使用您的数据填充此结构并将其地址返回到您的其他功能。
请记住以正确的顺序清理内存:首先,免费myDataPtr->data
,然后才免费myDataPtr
。