cの構造体(?)について質問があります。
以下のコードにて、途中で何故か構造体のs[t]->geneが全部なくなってしまうということが起こっております。
c
1void initialize_population(n, l) 2int n; /* number of strings */ 3int l; /* string length */ 4{ 5 int i, j, k, max_i; 6 double max_f; 7 char household_list[l * 32]; 8 9 //個体集団初期化 10 s = (String *)malloc(sizeof(String)*n); 11 if(s == NULL) printf("malloc failure for strings"); 12 13 //エリート初期化 14 elite = (String)malloc(sizeof(struct string)); 15 if(elite == NULL) printf("malloc failure for elite"); 16 elite->gene = (char *)malloc(sizeof(char)*l* 32); 17 if(elite->gene == NULL) printf("malloc failure for elite->gene"); 18 19 //n個の個体確保 20 for(i = 0; i < n; i++) { 21 s[i] = (String)malloc(sizeof(struct string)); 22 if(s[i] == NULL) printf("malloc failure for s[i]"); 23 24 s[i]->gene = (char *)malloc(sizeof(char)*l* 32); 25 if(s[i]->gene == NULL) printf("malloc failure for s[i]->gene"); 26 27 //初期世帯生成 28 make_household_list(household_list, l); 29 30 for(j = 0; j < l* 32; j++) { 31 s[i]->gene[j] = household_list[j]; 32 } 33 34 //適応度計算 35 s[i]->fitness = fitness_all(i, s[i]->gene, l); 36 s[i]->length = l; 37 38 //遺伝子確認1 39 for(j = 0; j < l* 32; j++) { 40 printf("%d,",s[i]->gene[j]); 41 } 42 printf("\n"); 43 44 } 45 46 //遺伝子確認2 47 for(i = 0; i < n; i++) { 48 if(s[i]->gene == NULL) printf("malloc failure for s[i]->gene\n"); 49 for(j = 0; j < l* 32; j++) { 50 printf("%d,",s[i]->gene[j]); 51 } 52 } 53 printf("\n"); 54 55}
"//n個の個体確保"のfor文の部分ではループがうまく全て実行されており、
このfor文の中で行われている
"//遺伝子確認1"では,ループ毎に個体数分の個体sのgene要素s[i]->gene[j]が全て表示されます。
しかし、そのforループが全て終わり、その後
"//遺伝子確認2"にてgeneを確認しようとすると、s[i]->geneが消えており、
if(s[i]->gene == NULL)の場合に表示される
"malloc failure for s[i]->gene"
が表示され、その後も表示されずに
Segmentation fault (コアダンプ)
が起こってしまいます。
以上なのですが、自分では解決方法がわからないのでご相談させていただきました。
make_household_list()と、fitness_all()の部分では、s[]->geneに対して初期化や代入、free()など値が変化するようなことは行っておりません
解決策や怪しい部分をご教授願います。
回答1件
あなたの回答
tips
プレビュー