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故障,这是您自己应该知道的最低信息,也将包含在问题中。现在是学习的最佳时机,包括您作为程序员将使用的最重要的工具:调试器。