C 如何访问printpostroder函数中的树?

C 如何访问printpostroder函数中的树?,c,memory-management,tree,tree-traversal,C,Memory Management,Tree,Tree Traversal,这是我的树结构: typedef struct quad { struct quad *child[4]; char *names; } quad; 我需要建立它,然后在后期打印 但我无法访问printpostorder函数中树的内存: void printpostorder(quad * tree) { if (tree->names[0] == 'G') { printpostorder(tree->

这是我的树结构:

    typedef struct quad 
{
    struct quad *child[4];
    char *names;
} quad;
我需要建立它,然后在后期打印 但我无法访问printpostorder函数中树的内存:

void printpostorder(quad * tree)  
    {
       if (tree->names[0] == 'G') {      
        printpostorder(tree->child[0]); 
        printpostorder(tree->child[1]); 
        printpostorder(tree->child[2]); 
        printpostorder(tree->child[3]); 
        
        printf("%s", tree->names);
        }
        else {
        printf("%s", tree->names);
        }
    } 
在主函数中调用此函数之前,我可以访问它

int main(void){
    
   int n = 0;
   int size;
   quad * t;
   char * str1 = (char *)malloc(MAX * sizeof(char));
   printf("Enter name: ");
   scanf("%s", str1);
   size = strlen(str1);
   t = build_preorder_tree(str1,t,&n,size);
   printpostorder(t);
   
   
}
这里是构建树函数,基本上我们必须从预订单构建,然后打印出后订单

quad* build_preorder_tree(char *s_r, quad * tree, int * index_ptr,int size){
    
    char c;
    int s = 0;
    int index = *index_ptr;
    c = s_r[index];
    char d = ']';
    char * ptr = (char *)malloc(MAX * sizeof(char));
    char * ptr1;
    
    if(index == size){
        return;
    }
    
    tree = malloc(sizeof(quad*));
    tree -> names = (char *)malloc(MAX * sizeof(char));
    

    if(c == 'G') {
     tree->names = "G";
     (*index_ptr)++;
     tree->child[SW] = build_preorder_tree(s_r, tree->child[SW],index_ptr,size);
     tree->child[SE] = build_preorder_tree(s_r, tree->child[SE],index_ptr,size);
     tree->child[NW] = build_preorder_tree(s_r, tree->child[NW],index_ptr,size);
     tree->child[NE] = build_preorder_tree(s_r, tree->child[NE],index_ptr,size);
     
    } 
    if(c == 'W') {
        tree->names = "W";
        (*index_ptr)++;
    }
    if(c == 'B') {
        strcpy(ptr,s_r);
        ptr1 = strtok(ptr+index,"]");
        strncat(ptr1,&d,1);
        s = strlen(ptr1);
        (*index_ptr)= (*index_ptr) + s;
        tree->names  = ptr1;
        
    }
    
     
    
 return tree;
 
}
当我调用printpostorder(t)时,在第一次调用
if(树->名称[0]=='G')


在调用printpostorder之前,我尝试访问树,并且我能够访问树的每个元素

我在我的build_preorder_树函数中动态分配了内存编译器应该发出警告,指出此行不正确:
printpostorder(&t)。函数参数必须是
quad*
,但您正在传入一个
quad**
。现在您已经更改了代码,问题不再是原来的问题了。现在您需要解释“无法访问内存”的含义。它会崩溃吗?它是否打印错误的结果?我们还需要查看
build\u preorder\u树的定义。也就是说,提供一个调试器,也可以使用调试器。它将立即准确地告诉您哪一行代码触发seg故障,这是您自己应该知道的最低信息,也将包含在问题中。现在是学习的最佳时机,包括您作为程序员将使用的最重要的工具:调试器。