加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

克隆结构?

发布时间:2020-12-16 09:59:33 所属栏目:百科 来源:网络整理
导读:我有一些结构如下: typedef struct { GLubyte red,green,blue;} pixel;typedef struct { pixel *pixelData; int w,h;} imagen; 它适用于图像加载器和图像处理器(将过滤器应用于加载的图像). 我正在初始化两个imagen: imagen work,original; 我应该在应用了
我有一些结构如下:

typedef struct {
    GLubyte red,green,blue;
} pixel;

typedef struct {
    pixel *pixelData;
    int w,h;
} imagen;

它适用于图像加载器和图像处理器(将过滤器应用于加载的图像).

我正在初始化两个imagen:

imagen work,original;

我应该在应用了一些过滤器之后显示工作,原始是我可以重置的东西.

void loadImage() {
    //load data into (imagen)original
}
work = original;

加载图像后,我将其复制到工作中,以便我可以保留原始文件的副本,如果我想稍后重置(重置为work = original再次).我面临的问题是重置不起作用:我申请工作的任何东西也适用于原创,所以我有效地重置为我正在重置的东西.

我认为问题是我的工作=原创;我对C很新,但我假设我只是指着原创作品,所以我在工作上做的任何逻辑也适用于原创?

original.w = 40;
work = original;
work.w = 50;
work = original;

在这种情况下,工作是40还是50?如果它确实指向原版,那么我如何将原始版本克隆到工作中,这样我就可以安全地从事工作而不会有原创的后果?

解决方法

你的struct中有一个pixelData指针:

typedef struct {
    pixel *pixelData;
    int w,h;
} imagen;

为了创建完全独立的副本,您需要复制pixelData指向的数据:

work.w = original.w;
work.h = original.h;
size_t size = sizeof(pixel) * work.w * work.h;
work.pixelData = (pixel*)malloc(size);
memcpy(original.pixelData,work.pixelData,size);

另请注意,当您不再需要它时,您必须释放已分配的内存:

free(work.pixelData);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读