我实现了这个函数来创建一个 dept 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。但是这两条线真的是一样的!!!只是孩子结构的地址....那么,有人知道为什么会这样吗?malloc 不是分配一个连续的内存块吗?
这件事真的让我很困惑!请帮忙!
谢谢=),
英格丽德