Cでの2次元配列(構造体の)の概念について頭を悩ませようとしています
次の定義があるとします。
typedef struct group group;
struct group {
int members;
int neighbours;
char color;
};
#define NUM_CELLS 10
単一の配列から多次元配列にいくつかのデータをコピーすることになっている次の関数を使用します。
void test_mgroup_arr(group clusters[][NUM_CELLS],group tests[NUM_CELLS], int num_groups) {
int i;
int j = 0;
for (i = 0; i < num_groups; ++i)
clusters[i][j] = tests[i];
}
これは次のように呼ばれます:
int num_groups = 5;
group clusters[NUM_CELLS][NUM_CELLS];
group tests[NUM_CELLS];
tests[0].members = 101;
tests[0].neighbours = 111;
tests[1].members = 102;
tests[1].neighbours = 112;
tests[2].members = 103;
tests[2].neighbours = 113;
tests[3].members = 104;
tests[3].neighbours = 114;
tests[4] = tests[3];
test_mgroup_arr(clusters, tests, num_groups);
関数内のコードが、テスト配列から多次元配列の適切な場所に 5 つの項目をコピーすることを期待しています。ただし、これは期待どおりに機能せず、場合によっては segfault さえ発生します。
これはどのように正しくないのですか? 構造体を 1 次元配列から 2 次元配列にコピーする正しい方法は何でしょうか?