克隆结构?

克隆结构?,第1张

概述我有一些结构如下: 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);
总结

以上是内存溢出为你收集整理的克隆结构?全部内容,希望文章能够帮你解决克隆结构?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1216921.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存