gpt4 book ai didi

c - 链表指针类型错误?

转载 作者:行者123 更新时间:2023-11-30 19:18:05 25 4
gpt4 key购买 nike

好吧,长话短说。我在处理多文件链表及其指针时遇到问题......该代码包括几个文件:prog10.h、createFile.c、main.c、release memory.c 以及我应该完成的代码片段 p10.c

文件如下

  1. prog10.h

    #include<stdio.h> 
    #include<stdlib.h>
    typedef struct person
    {
    char name[20];
    int age;
    struct person *next_ptr;
    } PERSON;

    PERSON* createList(void);
    void print_list(PERSON *head);
    void release_memory(PERSON*);
  2. createFile.c

      #include "prog10.h"
    PERSON* createList()
    {
    char answer;
    PERSON *current, *previous, *head = NULL;
    while(1)
    {
    printf("Add a person to the list? [y/n] ");
    scanf("%c", &answer);
    if(answer == 'n')
    return head;

    current = (PERSON*)malloc(sizeof(PERSON));

    printf("Enter a Name: ");
    scanf("%s", current->name);
    printf("Enter person's age: ");
    scanf("%i", &current->age);

    }
    }
  3. main.c

    #include "prog10.h"
    int main(void)
    {
    PERSON *head = NULL;
    head = createList();
    print_list(head);
    release_memory(head);

    printf("Done\n");
    return 0;
    }
  4. releaseMemory.c

    #include "prog10.h"
    void release_memory(PERSON *person *person_ptr)
    {
    PERSON *tmp_next_ptr;
    while(person_ptr != NULL)
    {
    tmp_next_ptr = person_ptr->next_ptr;
    free(person_ptr);
    person_ptr = tmp_next_ptr;
    }
    puts("Memory Released");
    }
  5. p10.c

    #include "prog10.h"
    void print_list(PERSON *person_ptr)
    {
    while(ptr != NULL)
    {
    printf("Name = %s\n", ptr->name);
    printf("Age = %i\n", ptr->age);

    ptr = ptr->next_ptr;
    }
    }

我知道对于比我更有经验的人来说这可能是显而易见的,但为什么它没有运行?请帮忙,我真的迷路了,需要为作业/期末找出答案:b

最佳答案

好吧,尽管这个问题存在问题,但在浏览完之后,我觉得我应该将我的评论整理成某种答案。所以这里...

我们将从一个简单的开始。

Don't typecast the result of malloc

我认为您没有正确理解如何使用结构名称和结构类型定义作为数据类型。

如果你创建一个像这样的结构: typedef struct person{...}PERSON; 当你使用 PERSON 作为参数的类型,并且你想要一个结构指针时,你会这样做像这样:func(PERSON *person_ptr)。 PERSON 是本例中的类型,* 表示我们想要一个指向该结构的指针,person_ptr 是该结构的名称。

警惕变量名称。

您在一个函数中使用 ptr,该变量既不是参数也不是声明的局部或全局变量。您应该会收到一个错误,表明 ptr 尚未定义。并注意您为变量指定的名称。当您命名变量时,请使其易于查看并理解其含义,而无需注释,或者如有必要,请提供注释,以便准确说明该变量的含义。

您的 createList 没有执行其预期的操作。

在创建列表中,您实际上并没有创建列表,您只是创建了一堆头节点并返回 您创建的最后一个 NULL。您必须记住,在创建节点时,需要将它们附加到前一个节点的末尾(或前一个节点的前面,具体取决于列表的实现及其目的)。

当您在列表中创建节点时,请记住将它们链接在一起(并且不要忘记在此过程中不要丢失任何内容)。您最多创建 N 个节点,但您会丢失其中的每一个节点,因为您从未将它们与 next_ptr

链接在一起

这是答案的开始,但我不想为您重写代码,因为我觉得在学习抽象数据类型等内容时,尝试和错误是有值(value)的。稍微处理一下代码,如果您仍然遇到问题,请编辑您的问题。如果你这样做,请尽量简洁地描述问题。不需要发布代码的最后一点。

关于c - 链表指针类型错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27182722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com