
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);总结
以上是内存溢出为你收集整理的克隆结构?全部内容,希望文章能够帮你解决克隆结构?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)