错误:请求非结构或联合中的成员“数据”|

问题描述 投票:0回答:1

我正在尝试练习二叉树。

我为节点创建了一个结构体,将其分配给根节点,并为左儿子分配了空间。

我构建了一个返回树大小的函数,但在尝试初始化左儿子的变量时似乎出现错误。

主要功能:

int main()
{
    node* root = (node*) malloc(sizeof(node));//allocate space for root
    root->data = 7;
    root->left = (node*) malloc(sizeof(node));//allocate space for left son of root
    root->right = NULL;

    root->left.data = 8;//ERROR HERE!
    root->left.left = NULL;//ERROR HERE!
    root->left.right = NULL;//ERROR HERE!

    printf("size of tree: %d\n", sizeOfTree(root));

    return 0;
}

节点结构:

typedef struct
{
    int data;
    struct node* left;
    struct node* right;
} node;

我得到的错误:

错误:请求非结构或联合中的成员“数据”|
错误:在非结构或联合中请求成员“左”|
错误:在非结构或联合中请求成员“权利”|

我做错了什么?

c struct dereference
1个回答
2
投票

您在那里遇到错误,因为您尝试使用 . 而不是 -> 访问该指针。 另外 typedef struct 应该是 typedef struct node

试试这个:

#include<stdio.h>
#include<stdlib.h>

typedef struct node{
    int data;
    struct node* left;
    struct node* right;
}node;


int main(void){
    node* root = malloc(sizeof(node));//allocate space for root
    root->data = 7;
    root->left = malloc(sizeof(node));//allocate space for left son of root
    root->right = NULL;

    root->left->data = 8;//ERROR HERE!
    root->left->left = NULL;//ERROR HERE!
    root->left->right = NULL;//ERROR HERE!


    printf("size of tree: %d\n", sizeOfTree(root));
    return 0;
}

不要强制转换 malloc,因为 malloc 的返回结果是 void*

© www.soinside.com 2019 - 2024. All rights reserved.