双指针的未初始化值

时间:2017-03-16 18:09:58

标签: c segmentation-fault malloc infinite-loop double-pointer

我是C的新手并且正在处理一个需要操作wset(WordSet)对象的项目,该对象基本上只是一个WordNode对象数组,它们本身就是一个单词的表示(它们包含一个count int,所以相反重复的WordNode对象,现有的WordNode计数递增)

在实现基本搜索方法时,我没有初始化双指针WordNode的某些方面,因为通过Valgrind检查测试显示使用下面的(* p)允许内存泄漏,通过不是malloc& #39; d或免费(我认为后者不太可能)。

我想看看我是否错误地实现了这个问题,或者我的问题是否存在于此代码块之外,很可能是在创建内存的原始分配中。

static WordNode **search (WordSet *wset, char *word) {
 WordNode **p;
 p = &((wset)->head);
  char *pWord = (*p)->word;
  while((*p) != NULL){
  //if the words we're trying to find and our word match...
  //...break and return the address
      if(strcmp(pWord,word)==0){
        break;
      }
      p = &((*p)->next);
  }
  return p;
}

任何错误似乎都追溯到这里并且调试是通过valgrind执行的,因为一些更改(特别是关于(* p))导致valgrind在陷入无限的while循环时永远不会完成。

我相信我现有的书面测试无关紧要,问题可以在这段代码中找到。但是,如果附加的上下文有助于详细说明,我会尝试添加它!

0 个答案:

没有答案