- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,长话短说。我在处理多文件链表及其指针时遇到问题......该代码包括几个文件:prog10.h、createFile.c、main.c、release memory.c 以及我应该完成的代码片段 p10.c
文件如下
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*);
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", ¤t->age);
}
}
main.c
#include "prog10.h"
int main(void)
{
PERSON *head = NULL;
head = createList();
print_list(head);
release_memory(head);
printf("Done\n");
return 0;
}
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");
}
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 尚未定义。并注意您为变量指定的名称。当您命名变量时,请使其易于查看并理解其含义,而无需注释,或者如有必要,请提供注释,以便准确说明该变量的含义。
在创建列表中,您实际上并没有创建列表,您只是创建了一堆头节点并返回
您创建的最后一个
NULL。您必须记住,在创建节点时,需要将它们附加到前一个节点的末尾(或前一个节点的前面,具体取决于列表的实现及其目的)。
当您在列表中创建节点时,请记住将它们链接在一起(并且不要忘记在此过程中不要丢失任何内容)。您最多创建 N 个节点,但您会丢失其中的每一个节点,因为您从未将它们与 next_ptr
这是答案的开始,但我不想为您重写代码,因为我觉得在学习抽象数据类型等内容时,尝试和错误是有值(value)的。稍微处理一下代码,如果您仍然遇到问题,请编辑您的问题。如果你这样做,请尽量简洁地描述问题。不需要发布代码的最后一点。
关于c - 链表指针类型错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27182722/
今天我们将开始第二个数据类型-链表的学习,同样我们还是用最原始的方式,自己申请内存管理内存来实现一个链表。 01、01、定义 什么是链表?链表在物理存储结构上表现为非顺序性和非连续性,因此链表
前言:笔记是参考B站up主尚硅谷,图片、代码都是哦。在blog写笔记~(图片、代码来源尚硅谷,侵权必删!) 尚硅谷数据结构学习路线B站网站:https://www.bilibili.com/video
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我想创建一个没有全局变量的单个链表。我用 NULL 初始化了第一个元素,然后想将第一个元素 node 复制到 list_。它被复制到函数中,但副作用不起作用。在我的主函数中,该值仍然是NULL。如果我
我正在尝试使链表与此处的链表相似: linked list in C 那就是在另一个结构中有“头”,我首先称它为“头”。但是我发现做那个改变。很难向 list_item 结构添加值。我已经尝试了一些东
我正在尝试理解链表的代码。我明白他们是如何工作的。我正在查看一些与动态内存和链表有关的代码,我在此处对其进行了简化: #include #include typedef struct nod
有人可以解释下面的代码吗?我是 C 的新手,正在努力弄清楚。为什么我们最后有 queueNodeT? typedef char queueElementT; typedef struct queueN
场景如下:- 我想反转单链表的方向,换句话说,反转后所有指针现在应该指向后.. 这个算法应该需要线性时间。 我想到的解决方案是使用另一个数据结构 A Stack.. 借助它可以轻松反转单向链表,所有指
在 python 中使用链表最简单的方法是什么?在 scheme 中,链表由 '(1 2 3 4 5) 定义。 Python 的列表 [1, 2, 3, 4, 5] 和元组 (1, 2, 3, 4,
本文首发公众号:小码A梦 一般数据主要存储的形式主要有两种,一种是数组,一种是链表。数组是用来存储固定大小的同类型元素,存储在内存中是 一片连续 的空间。而链表就不同于数组。链表
虽然之前有人问过关于链表与数组的问题,但答案大多归结为我们大多数人在某个时候可能已经学到的东西: 列表擅长插入和删除 数组擅长随机访问 现在像 Bjarne Stroustrup 这样受人尊敬的人有
位置 在堆中,碎片化(每个节点的 malloc) - 在几种不同的方式(缓慢分配,缓慢访问,内存碎片)方面效率低下 在堆中,在一个大块中 - 当需要重新分配 时,数据结构获得的所有灵活性都将丢失 在堆
我完成了泛型的学习,但并不容易。不过,我确实明白了。这是我的理解。我希望您纠正我的错误并回答几个问题:)。 public class LinkedList { //class definition }
我将如何创建一个链接列表来在 OCaml 中保存我的数据?我正在尝试制作一个单链表,但是我遇到了语法问题。我只想制作一个模块来简单地从链表中获取'a,插入'a或删除'a。 有人知道吗? 最佳答案 正如
我在使用这段代码时遇到了问题,我不确定我做错了什么 #include #include #include #include typedef struct flight_struct{
我正在创建一个函数来删除给定列表的最后一个节点(作为参数输入)。该函数本身非常简单,如下所示。 function popBack(list) { var current = list.head
我正在尝试开发一种方法,该方法将在链接列表中的当前节点之前插入传递给它的节点。它有3个条件。对于此实现,不能有任何头节点(仅对列表中第一个节点的引用),并且我无法添加更多变量。 如果列表为空,则将传递
使用 scala,我已将大约 100000 个节点添加到链表中。当我使用函数 length 时,例如 mylist.length。我收到“java.lang.StackOverflowError”错误
所以我正在学习处理链表。我将如何递归地添加节点内的项目。我可以通过执行 sum = h.item +h.next.item+h.next.next.item 添加它们,但这只有在我有小的链接列表时才有
所以我一直在努力理解链表的概念(一直在看一些示例代码,我在互联网上找到了这个。现在如果我能请别人确认我是否正确掌握了一些概念。我将绘制图表,说明我认为每个代码链接的作用。 #include #inc
我是一名优秀的程序员,十分优秀!