したがって、memcpyを割り当てることによって構造体をコピーすることにはすでに多くの疑問があります。今、私は2つの構造を持つ小型のprogrammを書いた:memcpyはCで動作しない別の構造を持つ構造体上にある
typedef struct {
int b;
} myStruct2;
typedef struct {
int a;
myStruct2* sub_struct;
} myStruct;
は、だから今、私はちょうどのためにそれを残し、私はメモリを割り当てた後、NULLポインタを処理しています(二つの構造を定義し、このようにそれらの上にのmemcpyを使用しようとしました読みやすい):
myStruct* var_one = malloc(sizeof(myStruct));
var_one->sub_struct = malloc(sizeof(myStruct2));
var_one->a = 10;
var_one->sub_struct->b = 111;
myStruct* var_two = malloc(sizeof(myStruct));
var_two->sub_struct = malloc(sizeof(myStruct2));
var_two->a = 22;
var_two->sub_struct->b = 2222;
printf("%d und %d\n", var_two->a, var_two->sub_struct->b);
memcpy(var_two, var_one, sizeof(myStruct));
printf("%d und %d\n", var_two->a, var_two->sub_struct->b);
Sofarはすべて正常に動作し、期待通りに動作します。
free(var_one->sub_struct);
free(var_one);
printf("%d und %d\n", var_two->a, var_two->sub_struct->b);
第二のprintfは私にエラーを与えている:私はない場合でも知っているサイズ4の
無効な読み取りを。
誰かが私に説明する理由はありますか? var_twoのサブ構造体のメモリは別に割り当てられています。私はmemcpyがメモリの一部をコピーしていると思いますか?なぜ、最初のサブ構造を解放して2番目のサブ構造に影響を与えるのですか?
'memcpy'はディープコピーを実行しません。ポインターやコピーオブジェクトに従わない場合は、カスタム関数を記述します。 – StoryTeller