この関数を実装して、部門 d のツリーを作成し、分岐因子 b を使用します。
void create(node *n, int b, int d){
int cont,i;
if(d>0){
n->children = (node *) malloc(b*sizeof(node));
if(!n->children){
printf("\n\nMemory couldn't be allocated\n");
getchar();
return;
}
n->alpha = -100;
for(i=0;i<b;i++){
create((n->children+i*sizeof(node)), b, d-1);
}
}
else if(d==0){
if(n){
n->alpha = rand()%9 + 1;
printf("%d ",n->alpha);
}
}
d<6 および b<6 の場合は問題なく動作しますが、b =6 および d=6 以上の場合、セグメンテーション エラーが発生します。
しかし、行create((n->children+i*sizeof(node)), b, d-1);を変更すると、行create((&n->children[i]), b, d-1); 、私がテストした限り、それは任意の d と b に対して完全に機能します。しかし、2つの行は本当に同じです!!! children 構造体のアドレスだけ....では、なぜそれが起こっているのか誰か知っていますか? malloc は 1 つの連続したメモリ ブロックを割り当てませんか?
これは本当に私を混乱させました!! 助けてください!
ありがとう =) 、
イングリッド