【问题标题】:Finding certain item in a tree (C)在树中查找某个项目 (C)
【发布时间】:2016-05-12 16:10:00
【问题描述】:

我有一棵有结构的树。我需要找到最大的最小值(给定)。

    Item this_word (link h, int max){
        Item word;
        if (h == NULL) 
            return 0;
        if (h->item->acc == max){
            word = h->item; 
            this_word(h->l, max);
        }
        else{ 
            this_word(h->l, max);
            this_word(h->r, max);
        }
        return word;
    }

但是我遇到了分段错误..

【问题讨论】:

  • 链接变量是指针吗?因为你像一个人一样访问它
  • 你的段错误到底在哪里?您是否在调试器中运行过程序?请给出Itemlink 类型的定义。
  • @BackDoorNoBaby typedef 是邪恶的
  • 我也觉得你的else声明应该是两个else if声明
  • word = h->item;之后,为什么代码调用this_word(h->l, max);而不是仅仅返回word?建议提供满足“找到最大的最小值”的值示例。

标签: c tree segmentation-fault


【解决方案1】:

h!= NULLh->item->acc == max 成立时,您的代码会出现段错误。在这种情况下,执行 else 分支并返回之前未设置的 word。您可以通过为 word 正确分配值来解决此问题。

Item this_word (link h, int max){
        Item word;
        if (h == NULL) {
            return 0;
        }
        if (h->item->acc == max) {
            word = h->item; 
            this_word(h->l, max);
        } else { 
            // assign a certain value to word
            this_word(h->l, max);
            this_word(h->r, max);
        }
        return word;
    }

据我所知,您的代码有点奇怪,这是因为人们无法根据您的问题完全理解您想要做什么。为了提高分析器的质量,提供更好的问题(添加代码、解释上下文等)

【讨论】:

  • 我这样做了,但我仍然遇到分段错误。该结构有一个字符串和一个数字。树是通过字符串组织的,我想返回具有给定数字的结构。当有两个像“一个”和“计算机”这样的数字时,我想返回“计算机”,因为它是按字母顺序排列的
  • @Heather 所以树是根据字符串排序的。你想得到具有一定数字的“最小”字符串吗?您绝对应该将此添加到您的问题中!树是否正确初始化?如果返回 NULL 会导致段错误吗?我想我们需要更多代码..
  • 我使用void init() { head = NULL; } 来初始化树。什么时候返回NULL?
  • 请通过编辑将前面提到的要点添加到您的问题中。并添加更多代码。上下文..您使用的其他功能..主要功能..等等。
猜你喜欢
  • 2018-11-26
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多