rom*_*013 5 c struct pointers deep-copy
我需要你的帮助!
我喜欢复制这样的结构:
typedef struct PackageObject_s {
long **vertex; // vertices
long num_vertex; // count of vertices
long objectType; //
REAL r; //
long bottom[3]; // bounding box bottom vector
long top[3]; // bounding box top vector
long *start; //
REAL coverage; //
} PackageObject __attribute__ ((aligned));
Run Code Online (Sandbox Code Playgroud)
我试试这样:
static inline void PackageObject_copy(PackageObject *dst, const PackageObject *src) {
dst->num_vertex = src->num_vertex;
dst->objectType = src->objectType;
dst->r = src->r;
vec_assign3l(dst->bottom, src->bottom);
vec_assign3l(dst->top, src->top);
// TODO copy **vertex ???
dst->coverage = src->coverage;
dst->coverage = src->coverage;
}
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
预先感谢您的帮助!!
更新 - 我的深度复制解决方案vertex- thx所有帮助:
dst->vertex = (long *)malloc(dst->num_vertex * 3 * sizeof(long));
for (long i=0; i < src->num_vertex; i++) {
dst->vertex[i] = (long)malloc(3*sizeof(long));
memcpy(dst->vertex[i],src->vertex[i],3 * sizeof(long));
}
Run Code Online (Sandbox Code Playgroud)
我假设对象之间不共享顶点。也就是说,它们属于所讨论的结构。
有两种主要情况需要考虑:
1. Copying into a new object
2. Copying into an existing object
Run Code Online (Sandbox Code Playgroud)
复制到新对象中非常简单。
1a. Allocate space for <num_vertex> pointers.
1b. Allocate space for each vertex.
2a. Copy <num_vertex> pointers from source to destination.
2b. Copy <num_vertex> vertices from source to destination.
Run Code Online (Sandbox Code Playgroud)
复制到现有对象与复制到新对象非常相似,只是您必须先执行以下操作。
0a. Loop through each element of <vertex> and free the vertex.
0b. Free the array of vertex pointers.
1. Follow the steps for copying into a new object.
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。