C言語でアプリケーションを書いています。構造に基づいて新しいタイプを作成しました。
typedef struct ENTITY
{
char * field1;
char * field2;
} entity;
次に、エンティティの配列を動的に割り当てる関数を定義しました。
int my_function(entity ** my_array)
{
count = random_int(1, 10);
entity * result;
result = (entity *) calloc(count, sizeof(entity));
int i;
for(i = 0 ; i < count ; i++)
{
(result+i)->field1 = strdup("Blabla in field1");
(result+i)->field2 = strdup("Blabla in flied2");
// This line print correctly "Blabla in field1" for each element in the array.
printf("->{%s}\n", (result+i)->field1);
}
*my_array = result;
return count;
}
メインファイルでは、次の関数を使用します。
entity * my_array;
count = my_function(&my_array);
for(i = 0 ; i < count ; i++)
{
printf("field1 of the element %d: %s\n", i, my_array[i].field1);
}
何らかの理由で、このコードは、配列が <= 3 要素で満たされている場合に機能します。配列内の 4 つの要素から、セグメンテーション違反エラーが発生します。
->{Blabla in field1}
->{Blabla in field1}
->{Blabla in field1}
->{Blabla in field1}
field1 of the element 0: `�fZ$
Segmentation fault
ここで動的割り当てについて多くのことを読みましたが、この問題を解決することができません。どんな手掛かり?
助けてくれてありがとう!