#include <string.h>
#define ARRAY_LENGTH 4
// insert your code above here.. and as the other answer says you should
// always check malloc's return value to make sure it succeeded before
// continuing or you will seg fault. If it fails, you should gracefully
// handle the error
memcpy(b, a, sizeof(int) * ARRAY_LENGTH); // copies sizeof(int)*ARRAY_LENGTH bytes
// from the memory space pointed to by a
// to the memory space pointed to by b
free(a); // returns the memory pointed to by a to the heap
詳しい情報は、およそmemcpy
hereを見つけることができます。メモリをコピーするための高度に最適化された機能です。 4つの値しか持っていない場合は、あなた自身のループのパフォーマンスの違い(memcpy
)、または数千から何百万回も実行していない限り、手動で各値を手動で割り当てる(ループをアンロールする)ことはできません。
親指の一般的なルールとして、できるだけ控えめにmalloc
を使用したいと思います。実行するまでに必要なメモリ量がわからない場合や、メモリの範囲を関数の外に維持したい場合は、使用する必要があります。メモリを誤って管理することは、大規模なプログラムでは追跡が困難な多くのバグの原因です。なぜなら、同じ場所で同じ時間に常に同じ時間に自分自身を明示するわけではないからです。ここでは、自分が行っていることを正確に知るための十分なコードを表示していません。しかし、配列のサイズを事前に知っているので(4 int
)、関数外でこれらの配列が必要な場合を除き、ほとんどのシステムではスタック上に配置してください:
int a[4];
int b[4];
// perform assignment to a
// perform copy to b
// do work on data
// ....
// now when the function ends, these arrays will automatically get destroyed, saving you the trouble
a
配列をコピーする正当な理由があることをあなたの言葉でお伝えします。コードからはわかりません。 )
は最後に、これはだまされやすい人だったと私たちのどちらもがそれに答えたはず:) How to copy one integer array to another
お勧め 'int * a = malloc(4 * sizeof(* a));' - どちらのバージョンも正しいですが、このように書くと間違いを起こす可能性は少し低くなります。 –
あなたは何をしようとしているのか分かりません。内容をまったくコピーするか、ポインタをコピーするだけですか? –