意外错误:使用代码::块、c 语言"Dereferencing pointer to incomplete type"



我正在为我的基础c编程考试做这个练习,我得到这个错误:"解引用指针到不完整类型",使用代码::块。下面是我的代码:

struct listPlot{
char name[25];
char surname[25];
int age;
struct listplot *next;
struct listPlot *prev;
};
struct listPlot *list;
struct listPlot *init(void)
{
    list=malloc(sizeof(list));
    list->next=NULL;
    list->prev=NULL;
    return list;
};
struct listPlot *addElement(struct listPlot *input)
{
    printf("nNew element, Name:n");
    gets(input->name);
    printf("nSurname:n");
    gets(input->surname);
    printf("nAge:n");
    scanf("%d", &input->age);
    struct listPlot *newElement=malloc(sizeof(list));
    *input->next=*newElement; //This is the line where the error occurs
    newElement->next=NULL;
    *newElement->prev=*input;
};

这个函数addElement应该以listPlot指针作为输入,插入姓名和年龄,创建列表的新元素并返回它的指针。我不明白这有什么问题……我为我的愚蠢道歉。另一个问题,如果我写input->next=newElement;而不是*input->next=*newElement;,我没有得到错误,但警告:"从不兼容的指针类型[默认启用]分配"。我再次为我的无能道歉,但我必须问你这是什么意思,这两行有什么不同。希望你不介意帮助我,提前谢谢你。

struct listPlot{
  char name[25];
  char surname[25];
  int age;
  struct listplot *next;
  struct listPlot *prev;
};

上面有个错别字。struct listplot *next应该是struct listPlot *next(大写P).你的编译器不知道struct listplot是什么,所以,它自然不能解引用指向它的指针。


list=malloc(sizeof(list));

这是错误的。大小应该是list 指向的的大小,而不是list本身的大小。在使用malloc()之前,还应该测试它的返回值:

struct listPlot *init(void)
{
  list = malloc (sizeof *list);
  if (list) {
    list->next=NULL;
    list->prev=NULL;
  }
  return list;
}

struct listPlot *addElement(struct listPlot *input)
{
  printf("nNew element, Name:n");
  gets(input->name);

gets()本质上是不安全的,应该(几乎)永远不要使用。如果输入比预期的长,它将继续在缓冲区外写入。一个更好的选择是fgets()


  .... 
  struct listPlot *newElement=malloc(sizeof(list));

尺寸又错了。好:

  struct listPlot *newElement = malloc(sizeof *newElement);

取左边的标识符sizeof,前面有一个星号,你就会自动得到正确的大小(对于一个元素)。读者不需要查找list是什么


  *input->next=*newElement; //This is the line where the error occurs
  newElement->next=NULL;
  *newElement->prev=*input;

这些行应该是:

  input->next = newElement;
  newElement->next = NULL;
  newElement->prev = input;
}

另外,在一些函数定义的末尾有分号。这些是错别字吗?

相关内容

  • 没有找到相关文章

最新更新