关于C++链表程序(基础)指针的一些疑问

#include<iostream>
#include<string>
using namespace std;
class A
{
public:
int num; \\声明图书的编号为整形
float s; \\声明图书的价格为浮点形
A *next; \\链表的next指针
};
A *head; \\头指针
A* ct()
{
A *p1,*p2;
p1=new A;
p2=p1;
head=p1;
cout<<"请输入图书的编号,0为结束程序"<<endl;
cin>>p1->num;

if(p1->num!=0)
{
cout<<"请输入图书的价格"<<endl;
cin>>p1->s;
}
else
{
cout<<"程序退出"<<endl;
delete p1,p2=0,head=0;
return head;
}
while(p1->num!=0)
{
p2=p1;
p1=new A;

cout<<"请输入图书的编号,0为结束程序"<<endl;
cin>>p1->num;

if(p1->num!=0)
{
cout<<"请输入图书的价格"<<endl;
cin>>p1->s;
p2->next=p1;
}
}

delete p1,p2->next=0,p2=0;
return head;

}

void main()
{

ct();

}

这是我根据课件要求编的,因为后面还要继续添加字符串识别插入等等,所以这不是一个完整的链表,而是最基础的链表结构,虽然是很基础但在这个程序中我还有很多的疑问搞不明白,希望大侠们能帮助我,谢谢啦!
第一个问题是关于delete删除堆中内存空间的问题,按理说一个new 关键字就要配合delete来释放内存空间,但在本程序里一开始new创建了新空间,当if语句为真时又创建了一个新空间(也就是链表的第二个节点),但最后只用了一个delete语句,那么while又是无限的循环,假设我循环了很多次创建了很多个节点但只删除了一个节点的内存空间会不会造成程序严重的内存泄露呢??
假设我循环了很多次创建了很多个节点但最终只是删除了一个节点的内存空间会不会造成程序严重的内存泄露呢??

抱歉我A类中打错了 应该是//而不是\\

理论上是会的,不安全。但是实际中由于编译器和操作系统本身的保护机制,并没有发现会出现什么问题。 最好改进代码(用一个循环从链表头一直删到链表尾),不要留下这个问题。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-08
new一个内存空间出来以后,要用delete释放内存,如果你多次创建节点,只删除一个节点,会造成内存的泄露,当你要释放链表的时候,你可以用一个while循环将所有的节点都释放掉。

c++链表问题
答:链表的结构就是图中所示了,r就是S的指针域指向的下一个节点。提示:r的指针域不为NULL,不能作为链表的尾节点哦,要给r->link=NULL;

c++ 链表,,求指导,程序崩溃,line:1044
1.链表的最后一个节点的next的值,是否设置为NULL了,如果没有设置,到了最后一个节点的时候,就会出现崩溃.2.你的链表中的每个节点的next值,是否都对了,如果有任一个节点的next没有指向有用的节点的话,就会访问不被允许访问的内存,导致崩溃.3.考虑下在进入循环的第一次是否就有问题,因为循环里,并没...

C++中关于局部指针的问题
getptr函数运行完毕后p变量是会被释放的,但是p->next代表的是你的链表中其中一个节点的指针域,这个可不是局部变量,而是链表本身的数据,返回它的引用没有任何问题。

c++ 链表,,求指导,程序崩溃,line:1044
链表的最后一个节点的next的值,是否设置为NULL了,如果没有设置,到了最后一个节点的时候,就会出现崩溃.你的链表中的每个节点的next值,是否都对了,如果有任一个节点的next没有指向有用的节点的话,就会访问不被允许访问的内存,导致崩溃.考虑下在进入循环的第一次是否就有问题,因为循环里,并没有判断p...

c++ MFC 里的链表问题(内详)
链表是一种数据结构,就像是一个一个的珠子串起来的链子,每个珠子就是一个结构体变量(当然这是C语言中的说法,要是是C++的话,每个珠子就是一个对象了),这种数据结构可以很方便地的访问每个元素,一般它是与数组相对的,数组是串行的,按照索引来访问元素,而链表是靠结构体中存储的下一个元素的...

C++中带头节点的动态链表,头节点指针内存分配出错
如果没有first = new Node的话,就代表first没有指向一段内存,所以你要引用其中的东西肯定会崩溃,指针必须指向内存,不然就是所谓的野指针,而p指向first,意思是p和first指向同一段内存,其实还是没内存不是?所以出错了,记住一点就是指针必须有指向的内存 ...

C\/C++ 实现链表是用vector还是指针比较好
链表肯定是指针更好 vector更类似于数组 用来做链表 很差的 链表的标准实现 就是指针的。

c++里面的链表结构到底是怎样的,我一点都弄不懂
定义一个结构体或者类 作为节点的类。然后用这个类new出一个一个的对象,就可以作为链表的节点了,然后用节点的指针域的值 来连接这些节点 就成了链表,网上有程序的,说不明白的 自己多找点程序 ,然后写。我以前不明白链表,然后我就用链表写了一个贪吃蛇。然后就明白了 ...

C++怎么确定一个链表是否是空的?
链表区分带头节点和不带头结点两种。假定链表节点指向下一节点的指针变量名为next。那么区分情况,判断空链表的方法为:1 带头节点。对于带头节点的链表,存在有不变的头结点head,这个节点并不保存任何数据,仅提供链表起始的一个标识。对于此类链表,判断为空的条件为head->next==NULL。当head的next值为...

谁告诉我c++里的链表是什么东西啊?
是由许许多多的(node)所链接而成的,每一个结点,包含了数据部分和指向下一个结点的指针(Pointer)。以动态内存配置的链表,在插入和删除元素的时候,只需要将指针改变指向就可以。链表和数组一样是一种数据结构,如何使用完全基于你的应用需求。链表和C++语言本身没有任何联系。很多语言都可以实现链表...

相似回答
大家正在搜