我试图将一个结构的内容复制到另一个临时结构,这样我就可以改变临时结构的RGB像素而不影响结果(如果我改变了全局像素)。
代码 结构
//the pixel structure
typedef struct {
GLubyte r, g, b;
} pixel;
//the global structure
typedef struct {
pixel *data;
int w, h;
} glob;
glob global, original, temp;
我的副本代码
void copyPic(glob *source, glob *dest){
int x,y;
dest -> w = source -> w;
dest -> h = source -> h;
dest -> data = (pixel *) malloc(dest->w * dest->h * sizeof(pixel*));
for (x=0; x < dest -> w; x++)
for (y=0; y < dest -> h; y++){
memcpy(dest->data[x+y*dest->w], source->data[x+y*dest->w], sizeof(pixel))
}
}
想法:glob结构保存图像宽度,高度和像素*数据,这是一个指向R,G,B值数组的指针。
我想将全局复制到临时,所以当我更改temp-&gt;数据的RGB时,它不会影响当前正在执行的代码,并且基于全局 - >数据的RGB更改RGB。
新代码
void copyPic(glob *src, glob *dest){
dest -> w = src -> w;
dest -> h = src -> h;
dest -> data = (pixel *) malloc(dest->w * dest->h * sizeof(pixel));
memcpy(dest->data, src->data, sizeof(pixel) * dest->w * dest->h);
}
我必须解放任何东西吗?
答案 0 :(得分:2)
您多次致电memcpy
(w * h)。我建议你只复制一次
memcpy(dest->data, source->data, sizeof(pixel) * w * h);
答案 1 :(得分:0)
首先:您的API不是很合作。通过分配dest-&gt;数据,您可能会覆盖其先前的内容,从而:泄漏内存。如果您唯一的目的是复制结构对象(使用深层复制),那么将IMHO作为 dup 操作实现更强大,如:
glob * dup_the_Pic(glob *src) {
glob * dst;
dest = malloc (sizeof *dst);
// maybe check for malloc failure here
memcpy (dst,src, sizeof *dst);
dst->data = malloc(dst->w * dst->h * sizeof *dst->data);
// maybe check for malloc failure here, too
memcpy(dst->data, src->data, dst->w * dst->h * sizeof *dst->data);
return dst;
}
被称为:
glob *the_original, *the_copy;
the_original = read_thing_from_file( ...);
the_copy = dup_the_Pic(the_original);
do_stuff_with_the_pic(the_copy);