Если у вас есть это:
void something(type *p) {
p = somethingelse;
}
int main() {
type *a = ...;
something(a);
}
Назначение в функции something
не изменит значение a
в вызывающем абоненте (main
здесь).Указатель передается значением , что означает, что копия значения указателя передана функции something
.
Если вы хотите изменить то, на что указывает a
ввызывающая сторона, вам нужно передать указатель на указатель.
void something(type **p) {
*p = somethingelse;
}
int main() {
type *a;
something(&a);
}
Вы не меняете first_TR
где-либо в этом коде.Таким образом, он все время сохраняет нулевое значение.
Либо вам не нужен first_TR, и ваш код должен выглядеть примерно так:
if(!first)
{
first = malloc(sizeof(TBST));
...
}
Или вам это нужно, и вы можете сделать
if(!first_TR)
{
first = malloc(sizeof(TBST));
...
first_TR = first;
}
(Вам не нужно приводить результат malloc
в C
.)