*T = malloc(sizeof(BSTnode));哪里错了
时间: 2023-11-18 10:02:16 浏览: 50
`T = malloc(sizeof(BSTnode));` 这句代码分配了内存,但是没有将其地址赋值给任何变量, `T` 只是一个函数中传入的参数,对 `T` 重新赋值不会影响函数外 `T` 的值。正确的做法是使用指向指针的指针或者指针的引用,如下所示。
使用指向指针的指针:
```c
void insert(BSTnode** T, int data) {
if (*T == NULL) {
*T = malloc(sizeof(BSTnode));
(*T)->data = data;
(*T)->left = NULL;
(*T)->right = NULL;
} else if (data < (*T)->data) {
insert(&((*T)->left), data);
} else {
insert(&((*T)->right), data);
}
}
```
使用指针的引用:
```c
void insert(BSTnode*& T, int data) {
if (T == NULL) {
T = malloc(sizeof(BSTnode));
T->data = data;
T->left = NULL;
T->right = NULL;
} else if (data < T->data) {
insert(T->left, data);
} else {
insert(T->right, data);
}
}
```
这样就可以在函数内部修改指针的值,从而达到在函数外部修改的目的。