發生奇怪的事情,我實現了這個功能來創建部門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,或更大,它給了我一個分段錯誤。
但是,當我改變行創建((n->兒童+ i * sizeof(節點)),b,d-1); ((& n-> children [i]),b,d-1);,它對任何d和b都是完美的,就我所測試的那樣。但是這兩條線確實是一樣的!只是兒童結構的地址....所以,有人知道爲什麼會發生? malloc是否分配一個連續的內存塊?
這件事真的讓我感到困惑!請幫助!
感謝=),
英格麗
'n-> children + i'等價於'&n-> children [i]'。只需刪除* sizeof – SHR
http://ideone.com/uPwIG7正如您在這裏看到的,指針算術已經清楚地計算了 – Rerito
@SHR中的對象大小。我正打算把它打出來,但是發佈後我就會投票並繼續前進。 – WhozCraig