나는 (줄 번호를 무시하십시오) 나는 이진 트리의 다음과 같은 정의가 C에서 이진 검색 트리에서의 삽입에 문제가 : 이진 검색 트리 C
40 struct WordBT
41 {
42 char *term;
43 struct WordBT *right;
44 struct WordBT *left;
46 };
47 typedef struct WordBT* WordPtrBT;
49 WordPtrBT mainListBT;
그리고 내 삽입 기능 :
81 int addlistBT(char *term, char *file, WordPtrBT curr){
86 if(curr == NULL){
87 WordPtrBT temp = (WordPtrBT)malloc(sizeof(WordPtrBT));
88 temp->term = term;
92 curr = temp;
94 return 1;
95 }
96 int test = //some test;
97 if(test == 0){ return 0;}
101 if(test > 0){ addlistBT(term, file, curr->left);}
104 if(test < 0){ addlistBT(term, file, curr->right);}
107 }
그럼 내가
addlistBT(term, file, mainListBT);
내가 프로그램에서 나중에 독방 감금 오류를 얻을 호출합니다. 내가 GDB로 디버깅 할 때이 내가 볼 것입니다 :
curr = temp;
(gdb) p temp
$7 = (WordPtrBT) 0x60a2a0
(gdb) p curr
$8 = (WordPtrBT) 0x0
(gdb) p mainListBT
$9 = (WordPtrBT) 0x0
(gdb) n
93 addfileBT(file, curr->file);
(gdb) p temp
$10 = (WordPtrBT) 0x60a2a0
(gdb) p curr
$11 = (WordPtrBT) 0x60a2a0
(gdb) p mainListBT
$12 = (WordPtrBT) 0x0
이제 내 문제는 그 밤은 mainListBT이 임시 포인터를 할당하는 이유 mainListBT 다음 포인터로 정의되어 있기 때문에? 감사합니다.
그것의 터무니없는 수치 KepaniHalo는 그/그녀의 대답을 삭제, 그것은 바로 하나 때문에. 'addListBT()'에 by-address가 아닌'mainListBT'를 전달하고 있습니다. 결과적으로 호출자 측 포인터 변수에는 아무런 변화가 없으며 함수가 메모리를 누출하여 모욕을 외상에 추가합니다 – WhozCraig
@ WhozCraig의 주석 옆에 'malloc (sizeof (WordPtrBT))'가 잘못되었습니다. 'malloc (sizeof (* temp)) '이어야합니다. – keltar
대기하지만 mainListBT는 구조체에 대한 포인터로 정의되어 있으므로 포인터를 전달하지 않습니까? –