代码之家  ›  专栏  ›  技术社区  ›  Rob

为什么指向malloc'd区域的指针会失败,除非复制?

  •  -2
  • Rob  · 技术社区  · 15 年前

    我有一个指向结构的指针。我调用一个例程,它确定我是否需要这个结构,并使用malloc为它分配空间,返回指向该区域的指针,如果不使用,则返回零。

    struct node *node_p;
    node_p = need_this();
    

    这样可以工作,并且我可以正确地访问结构的所有元素。struct node的元素之一是*next,它指向下一个节点struct和一个指向字符串的指针,但它返回的指针指向的字符串在这个例程中根本不存在。

    node_p=find_string(node_p->next,"string");
    

    但是,这不会将结构中的指针返回到正确的字符串。

    struct node *node_p, *node_copy;
    node_copy=find_string(node_p->next,"string");
    

    唯一的区别是使用第二个指针而不是原始指针。我在这里做的是错误的事情还是必须深入到被调用函数中?指责被调用函数的问题是,我在多个地方使用它几个月都没有问题,但是其他调用只查找字符串,从不转到“下一步”。

    编辑: 进一步的调试表明问题实际上在于传递给查找字符串的指针,而不是返回的指针。这改变了问题和问题,所以我需要打开另一个问题。
    2 回复  |  直到 15 年前
        1
  •  2
  •   sharptooth    15 年前

    在这段代码中:

    struct node *node_p, *node_copy;
    node_copy=find_string(node_p->next,"string");
    

    你的取消 node_p 当它尚未初始化时(不指向合法分配的内存块)。这是未定义的行为。你应该设置 诺迪普 先到一个合法分配的适当大小的内存块。

        2
  •  0
  •   Drakosha    15 年前

    您需要为每个结构显式地分配内存,即分配一个新结构并设置下一个指针指向它。 在初始化之前,C中的指针指向随机位置,您不应该取消对它们的引用。安全策略是将它们初始化为空值。