c語言報錯:segmentation fault:11

用鏈表實現一棵二叉樹然後初始化這個樹,代碼如下:

#define SIZE 4
 typedef struct Tree{
char data;
struct Tree *lChild;
struct Tree *rChild;
}Tree;
Tree* createTree(char data[]){
Tree *node[SIZE];
for(int i=0;i<SIZE;i++){
node[i]=(Tree*)malloc(sizeof(Tree));//A


node[i]->lChild=null;//D
node[i]->rChild=null;
node[i]->data=data[i];
printf("已賦值:%c\n",node[i]->data);
  }

node[0]->lChild = node[1];
node[0]->rChild = node[2];
node[1]->lChild = node[3];
return node[0]; 
}
void preTravel(Tree *root){
if(root == null){
return;
}
printf(" %c\n",root->data);
preTravel(root->lChild);
preTravel(root->rChild);
}

int main(){
char ch[8]={'1','2','3','4','5','6','7','8'};
Tree *root = (Tree*)malloc(sizeof(Tree));
root = createTree(ch);
return 0;
}

這段代碼運行正常,但是出現了報錯:segmentation fault:11 ,這個報錯的原因就是訪問範圍超出了內存分配的範圍,也就是有指針沒有被分配內存但是卻被訪問了。改正代碼:
在上面代碼//A和//D之間加上:

    node[i]->lChild=(Tree**)malloc(sizeof(Tree)); //B
    node[i]->rChild=(Tree*)malloc(sizeof(Tree));//C

加上後就正確了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章