So I've made this function to recover the closest number from what I've searched in an AVL Tree (like, if the numbers are 1 4 5 6 and if I search 5, it'll return 4).
I store this number in the variable 'closer' and check if the node I'm comparing is the last node in the tree. If I print closer in the auxiliary function it prints the exact number I wanted, but when I return it to the main function it's non-sense.
void searchCloser(AVL_TREE* tree, void* search) {
    if (AVL_Retrieve(tree,search)!= NULL)
    {
        NODE* node=tree->root;
        while (node->left)
            node=node->left;
        void* closer=node->dataPtr;     //First Element of Tree
        node=tree->root;
        while (node->right)
            node=node->right;
        void* end=node;                 //End of Tree
        closer=_searchCloser(tree->root,search,closer,end);
        printf("--%d",*(int*)closer);
    } else
        printf("Nao Encontrado");
}
void _searchCloser(NODE* root, void* search, void* closer, void*end) {
    if (root->left)
        _searchCloser(root->left,search,closer,end);
    if(compare(search,root->dataPtr)==1 && compare(search,closer)==1)  //Compare returns 1 for A bigger then B
        closer=root->dataPtr;
    if (root->right)
        _searchCloser(root->right,search,closer,end);
    if (end==root)
        return(closer);
}
 
    