質問を解決するのに役立つ答えを探してみましたが、自分で解決することはできませんでした。それで、ここに行きます。Cに似たnesCでプログラミングしています。
構造体配列の特定の場所に構造体 v のディープコピーを作成しようとしています。構造体 v は次のように定義されます。
struct ip_iovec v = {
.iov_next = NULL,
.iov_base = payload,
.iov_len = len,
};
ここで、ip_iovec は次のように定義されます。
struct ip_iovec {
uint8_t *iov_base;
size_t iov_len;
struct ip_iovec *iov_next;
};
このために、同じ型の構造体配列を作成しました。
struct ip_iovec buffer_v[2];
ここで、v を buffer_v 配列の 2 番目の位置にディープコピーしたいと思います。このために私はやろうとしました
buffer_v[1] = v;
buffer_v[1].iov_next = v.iov_next;
buffer_v[1].iov_base = v.iov_base;
buffer_v[1].iov_len = v.iov_len;
そしてまた試した
memcpy(&buffer_v[0], &v, sizeof(struct ip_iovec));
しかし、これはどれもうまくいきませんでした。さらに、配列の位置 1 から位置 0 に値をコピーしたいと思います。
buffer_v[0] = buffer_v[1] (1)
位置 0 の構造体値を使用します。
value = &buffer_v[0] (2)
vを定義している関数は(1)(2)を実行した後に呼び出されるため、値が書き換えられてしまうので、deepcopyしたいと思います。上記の操作が機能しなかったと言うとき、v が変更されると、buffer_v[0] の値も変更されることを意味します。これは、正しいディープコピーを実行している場合には発生しないはずです。
助けてくれてありがとう!