-3

char* フィールド\その他の構造体フィールドを含む構造体をコピーする方法を理解するのにまだ問題があります。

typedef struct node{
   int id;
   struct node* parent
   char * nodeName;
   struct node* nodes[100];
 }NODE,*pNODE;

私はこの関数を使用したいpNODE copyNode(pNODE oldNode) :

pNODE newNode = (pNODE)calloc(1,sizeof(NODE));
newNode.id=oldNode.id
//for the string that I want to copy I should allocate and use strcpy - in order not to point at the same string

しかし、今は親ノードに関して迷っています。どうすればコピーできますか? 単に行う場合:newNode.parent=oldNode.parent 同じ親オブジェクトを指し、たとえば Id を変更すると、newNode と oldNode の両方の ID が変更されます。どうすればコピーできますか?? 同じものを指ささずに?どうすればポインタ配列をコピーできますか??

ありがとう!

4

1 に答える 1

2

memcopy 関数を見てみましょう。

memcpy(oldNode.parent, newNode.parent, sizeof(node)).

もちろん、最初に malloc を使用して newNode の親にメモリを割り当てる必要があります (calloc はこのコンテキストでは意味がありません - 配列に使用されます)。

newNode.parent = (NODE*)malloc(sizeof(NODE))

ディープ コピーを実行する (つまり、参照されるオブジェクトを再利用しない) 場合は、newNode 構造体を調べて、構造体に含まれる各ポインターにメモリを割り当ててから、memcopy を適用する必要があります。

于 2012-08-06T08:38:18.500 に答える