2016-07-14 3 views
2

나는 다음과 같은 구조체가이 나무분할 오류 및 포인터가 null이 아닌

typedef struct treeNode *tree; 
typedef struct treeNode { 
    int key; 
    tree left, right; 
} treeNode; 

:

my tree

문제 : mytree-> 왼쪽> 왼쪽으로 -> 왼쪽은 NULL이 아닙니다. 하지만 왜?! 어떻게 지회가 끝났는지 확인할 수 있습니까?

tree mytree = (tree)malloc(sizeof(treeNode)); 
    mytree->key = 17; 
    mytree->left = (tree)malloc(sizeof(treeNode)); 
    mytree->left->key = 5; 
    mytree->left->left = (tree)malloc(sizeof(treeNode)); 
    mytree->left->right = (tree)malloc(sizeof(treeNode)); 
    mytree->left->left->key = 20; 
    mytree->left->right->key = 2; 
    mytree->right = (tree)malloc(sizeof(treeNode)); 
    mytree->right->key = 1; 
    mytree->right->left = (tree)malloc(sizeof(treeNode)); 
    mytree->right->right = (tree)malloc(sizeof(treeNode)); 
    mytree->right->left->key = 6; 
    mytree->right->right->key = 3; 
+2

'NULL'로 설정 했습니까? 아니? 왜 그렇게 될까요? –

+0

모든 노드를 초기화 할 때 왼쪽 및 오른쪽 자식을 NULL로 설정 했습니까? – Haris

+2

트리를 만드는 데 사용한 코드를 보지 않고도 우리를 도와 줄 수는 없습니다. 사용한 코드를 게시 할 수 있습니까? – templatetypedef

답변

5

treeNode를 할당 할 때 포인터를 NULL로 초기화합니까? C는 마술처럼 동적으로 할당 된 메모리를 초기화하지 않는다.

초기화 코드를 추가했습니다. malloc()은 메모리 내용을 0으로 초기화하지 않습니다. 코드에 leftright 포인터를 NULL으로 설정하는 것은 없습니다. 그것이 그들이 NULL이 아닌 이유입니다. 직접 초기화 (가장 적합)하거나 malloc() 대신 calloc()을 사용할 수 있습니다. calloc()은 할당 된 메모리를 0으로 초기화합니다.

+0

질문에 초기화 코드를 추가했습니다. – phip1611

관련 문제