-2

我正在尝试定义一个将返回指向结构的指针的函数。我认为我正确地遵循了这一点,(返回一个结构指针)但是当我尝试访问指针的成员时,我的代码一直抱怨这个错误消息,“错误:取消引用指向不完整类型的指针”。

这是我的代码

#include <stdio.h>  
#include <string.h>   
#include <assert.h>  

struct lnode  
{  
  char* word;  
  int   line;  
  int   count;  
  struct lnode* nn;     /* nn = next node */  
};

struct lnode* newNode (char* word, int line) 
{
  struct lnode* newn = (struct lnode*) malloc(sizeof (struct lnode));
  if (!newn)
    return NULL;
  strcpy (newn->word, word);
  newn->line  = line;
  newn->count = 1;
  newn->nn    = NULL;
  return newn;
}

int main()
{
  char* p = "hello";
  struct lnode* head = newNode (p, 5);
  //the following lines are causing errors
  assert (!strcmp (head->word, p));     
  assert (head->line  == 5);
  assert (head->count == 1);
  assert (!head->nn);
  return 0;
}

谢谢您的帮助!

4

2 回答 2

2

除了明显的问题,你错过了 include stdlib.h,还有你如何处理字符串的问题。

在 C 中,您(是的)必须管理用于字符串的所有内存。这包括成员指向的内存word

您的代码执行以下操作(在去除一些绒毛之后):

struct lnode* newn = malloc(...);
strcpy (newn->word, word);

在这里,newn->word未初始化,因此可能会崩溃。

您将需要分配内存来存储字符串,例如通过malloc()第二次调用:

struct lnode* newn = malloc(...);
newn->word = malloc(strlen(word) + 1);
strcpy (newn->word, word);
于 2013-02-18T16:16:22.403 回答
1

代码必须能够访问struct lnode.

正如 Alok Save 暗示的那样,您可能在另一个文件(可能是标题)中有声明,而您忘记了#include它。

于 2013-02-18T15:47:49.460 回答