克隆结构?
发布时间: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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |