想完成一个链表发现有错误,代码如下:

//http://ac.jobdu.com/problem.php?pid=1511
//֮ǰÓÃlistʵÏֵ쬽ñÌìÊÔÒ»ÏÂÓÃstructʵÏÖһϰÉ
//¿´¿´×Ô¼ºÄܲ»ÄÜʵÏÖÒ»¸öÁ´±í #include<iostream>
using namespace std; struct Node{
int num;
struct Node *next;
}; int main(void)
{
struct Node n1; n1.num=1; struct Node *head;
head=&n1;
n1.next=NULL;
struct Node *tail;
tail=head; int n;
cin>>n;
while(n)
{
struct Node node;
node.num=n;
node.next=NULL;
(*tail).next=&node;
*tail=node;
cin>>n; } struct Node *p;
p=head; while(p!=NULL)
{
cout<<(*p).num<<endl;
p=p->next;
} }

  最后打印的时候只打印最后一个值,想了想应该是赋值的时候的错误,由于赋值是在while循环里,导致node是局部变量,用完之后就销毁了,而链表也并没有在初始化的时候给分配相应的空间。所以只存留了最后一个。

解决办法:事先分配好空间。

看了网上的实现,也都是预先分配好空间的,都使用了malloc,这样在空间在销毁之前都是存在的,所以你赋值之后,局部变量没了,但是值已经赋给相应的空间了。

下边这样就是对的了:

#include "stdafx.h"
#include<iostream>
using namespace std; struct Node {
int num;
struct Node *next;
}; int main(void)
{
struct Node *head;
head = NULL;
struct Node *tail;
tail = head; int n;
cin >> n;
while (n != -1)
{
struct Node *p=(struct Node *)malloc(sizeof(struct Node));
p->num = n;
p->next = NULL; if (head == NULL)
{
head = p;
tail = p;
//head=&node;
}
else
{
tail->next = p;
tail = tail->next;
}
// cout<<(*tail).num<<endl;
cin >> n;
} struct Node *p;
p = head;
// int i = 1;
while (p != NULL)
{
//cout << i++;
cout << (*p).num << " ";
p = p->next;
} }

  猜测:用的空间没有释放,如果经常这么做可能会导致内存问题

c链表实现遇到的错误的更多相关文章

  1. 【BZOJ 1507】【NOI 2003】&【Tyvj P2388】Editor 块状链表模板题

    2016-06-18 当时关于块状链表的想法是错误的,之前维护的是一个动态的$\sqrt{n}$,所以常数巨大,今天才知道原因TwT,请不要参照这个程序为模板!!! 模板题水啊水~~~ 第一次写块状链 ...

  2. 单链表之C++实现

    在实现单链表时要注意对单链表的逻辑存储.物理存储有清晰的概念. 如上图链表已经完成,其逻辑结构如上.当需要对其进行操作,比如插入.删除,通常需要引 入指针,如上的ptr1.ptr2.在编程时一定要注意 ...

  3. 队列(存储结构双端链表)--Java实现

    /*用链表实现的队列--使用的是双端链表 *注意:空指针错误肯定是引用没有指向对象 * */ public class MyLinkedQueue { private MyFirstAndLastLi ...

  4. 链表的艺术——Linux内核链表分析

    引言: 链表是数据结构中的重要成员之中的一个.因为其结构简单且动态插入.删除节点用时少的长处,链表在开发中的应用场景许多.仅次于数组(越简单应用越广). 可是.正如其长处一样,链表的缺点也是显而易见的 ...

  5. Redis学习手册(List数据类型)

    一.概述: 在Redis中,List类型是按照插入顺序排序的字符串链表.和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素.在插入时,如果该键并不存在,Redis ...

  6. 源码解读—HashMap

    什么是HashMap ? hashMap是用什么基础数据结构实现的?HashMap是如何解决hashCode冲突的? hashMap的基础容器是数组+链表(transient Entry[] tabl ...

  7. [译] Closures in Lua - Lua中的闭包

    原文:(PDF) . 摘要 一等(first-class)函数是一种非常强大的语言结构,并且是函数式语言的基础特性.少数过程式语言由于其基于栈的实现,也支持一等函数.本文讨论了Lua 5.x用于实现一 ...

  8. C#Redis列表List

    一.前戏 在Redis中,List类型是按照插入顺序排序的字符串链表.和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素.在插入时,如果该键并不存在,Redis将 ...

  9. java 内存管理 —— 《Hotspot内存管理白皮书》

    说明   要学习Java或者任意一门技术,我觉得最好的是从官网的资料开始学习.官网所给出的资料总是最权威最知道来龙去脉的.而Java中间,垃圾回收与内存管理是Java中非常重要的一部分.<Hot ...

随机推荐

  1. js原生捕鱼达人(二)

    昨天写到构造炮弹,有点小bug不知道大家发现没有,今天继续昨天的步骤 7>构造炮弹   思路和前面都是一样一样的   注意构造函数中需要考虑的属性  和  构造函数的原型上面的方法 <sc ...

  2. bean的作用域

    bean的作用域为singleton,spring容器中只存在一个bean的实例,所有对该bean的请求只返回同一个bean实例. 当bean的作用域为prototype时,每一次对bean的请求,都 ...

  3. Web项目构建

    Gradle为Web开发提供了两个插件,war和jetty apply plugin: 'war' apply plugin: 'jetty' war插件继承了java插件,jetty插件继承了war ...

  4. GIT 专贴

    1.官网 git-scm.com github.com 代码库 2.源码

  5. [教程]Oracle 11g Express 安装和使用教程

    使用工具的第一步就是安装工具,配置环境!下面就Oracle 11g Express的安装和简单实用做一简介. 一.下载安装过程 去oracle的官网下载Oracle 11g express,大概300 ...

  6. WebSocket 服务器3

    其实,在服务器的选择上很广,基本上,主流语言都有WebSocket的服务器端实现,而我们作为前端开发工程师,当然要选择现在比较火热的NodeJS作为我们的服务器端环境了.NodeJS本身并没有原生的W ...

  7. Linux 基础入门(新版)”实验报告一~十二

    实验报告 日期: 2015年9月15日 一.实验的目的与要求 熟练地使用 Linux,本实验介绍 Linux 基本操作,shell 环境下的常用命令. 二.主要内容 1.Linux 基础入门& ...

  8. Arduino智能小车制作报告

    Arduino智能小车制作报告 制作成员:20135224陈实  20135208贺邦  20135207王国伊 前提: Arduino,是一个开源的单板机控制器,采用了基于开放源代码的软硬件平台,构 ...

  9. [转] Sublime Text 3支持GB2312和GBK编码

    Sublime Text 3与Sublime Text 2的不同 其实有不少人写过如何让Sublime Text 2支持GB2312和GBK编码,例如这篇.基本原理就是先装好Package Contr ...

  10. 解放双手:如何在本地调试远程服务器上的Node代码

    写在前面 谈到node断点调试,目前主要有三种方式,通过node内置调试工具.通过IDE(如vscode).通过node-inspector,三者本质上差不多.本文着重点在于介绍 如何在本地通过nod ...