Ошибка при разыменовании

struct treeNode {
    struct treeNode* leftPtr;
    int data;
    struct treeNode* rightPtr;
};

typedef struct treeNode TreeNode;
typedef struct TreeNode* TreeNodePtr;

// insertNode получает: treePtr - NULL и value - 20
 
void insertNode(TreeNodePtr* treePtr, int value)
{
    if (*treePtr == NULL)
    {
        *treePtr = malloc(sizeof(TreeNodePtr));

        if (*treePtr != NULL)
        {
            (*treePtr)->data = value;
            (*treePtr)->leftPtr = NULL;
            (*treePtr)->rightPtr = NULL;
        }
        else
        {
            printf("%d not inserted. No memory available.\n", value);
        }
    }
}

Подчеркивает первые скобки ( "(" ) этих строк:

(*treePtr)->data = value;
(*treePtr)->leftPtr = NULL;
(*treePtr)->rightPtr = NULL;

Компилятор пишет: E0393 использование указателя на тип неполного класса не допускается


Ответы (1 шт):

Автор решения: AlexGlebe

Во первых описка в имени структуры :

struct treeNode {
    struct treeNode* leftPtr;
    int data;
    struct treeNode* rightPtr;
};

typedef struct treeNode TreeNode;
typedef struct TreeNode* TreeNodePtr;
              ^^^
typedef struct treeNode* TreeNodePtr;
              или
typedef TreeNode* TreeNodePtr;

Во вторых память выделяется под указатель (это мало). Надо под структуру.

*treePtr = malloc(sizeof(TreeNodePtr));
                        ^^^
*treePtr = malloc(sizeof(TreeNode)); 
→ Ссылка