【问题标题】:Returning an uninitialised struct location返回未初始化的结构位置
【发布时间】:2012-10-21 23:29:45
【问题描述】:

如果我有某种树,并且我需要在该树中找到一个本质上为空的特定节点(结构尚未初始化/malloc'ed)。

如果我想返回那个非常具体的未初始化结构位置以便能够对其进行初始化,则类似于:

if (parentNode->childNode == NULL)
    return parentNode->childNode;

工作?或者它会返回NULL吗?我需要返回父节点吗?

我遇到的问题是这个特定节点可能是多个不同结构类型的子节点。我不确定如何在 C 中克服这个问题,因为它不支持泛型。有人有什么想法吗?

【问题讨论】:

  • @wildplasser 是的,我知道我实际上将它设置为 NULL,所以我可以知道它未初始化。

标签: c struct tree malloc


【解决方案1】:

你不能返回 NULL。它不会是一个可识别的位置。

但是你可以做的是:

  • malloc找到它的那个节点并返回malloc返回的指针,
  • 你可以return &(parentNode->childNode)(一个指向childNode指针的指针)它的调用者 该函数可用于将其设置为新节点,或
  • return parentNode

我不知道仿制药如何缓解这个问题。

【讨论】:

    【解决方案2】:

    您可以返回 parentNode 并在别处初始化其 child

    【讨论】:

    • 孩子的父母可以是不同的类型。因此,除非我使用 void*,否则我无法返回它 - 但那将是有问题的。
    【解决方案3】:

    如果子节点还没有初始化,那么你不能返回一个指向它的指针......你怎么能返回一个指向不存在的东西的指针??

    您需要做的是返回一个指向父节点的指针,然后可以将其更改为指向子节点新分配的内存。

    【讨论】:

    • 孩子的父母可以是不同的类型。因此,除非我使用 void*,否则我无法返回它 - 但那将是有问题的。
    • 孩子的父母指向孩子的指针总是相同的类型,即“指向孩子的指针”。所以你可以返回它,这就是我的建议。 &(parentNode.childNode)(注意点而不是箭头)
    【解决方案4】:

    您可以返回 NULL,但这没有任何意义。您可以返回一个 指针 指向值为 NULL 的指针:

    typedef struct link {
            struct link *next;
            } LL;
    
    
    LL **getTailPP(LL **ppHead)
    {
        for( ; *ppHead; ppHead = &(*ppHead)->next ) {;}
        return ppHead;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多