C++链表创建后,释放内存空间的问题。

2024-12-19 09:44:42
推荐回答(2个)
回答1:

大致看了一下,你这个程序的问题是内存管理方面的问题。
而且你的程序在内存方面问题比较大。
1、一个临时对象开辟(new)了一个内存空间,没有及时释放,导致生命周期结束,最后没有就没有办法去释放掉;还有一个临时变量开辟了多次也没有释放。
比如 成员函数create(int n)中
LNode *p;
ElemType x;
int i=1;
while(i<=n)
{
cout<<"请输入第"< cin>>x;
p=new LNode;//这里开辟了空间,后面没有释放
p->data=x;
p->next=head->next;
head->next=p;
i++;
}

临时变量p开辟了多次内存,每次都没有释放。

解决方法,可以考虑用成员指针变量pNode替代局部需要开辟的内存的地方。

2 内存管理另一个有效解决方法是。
在一个指针变量(比如 LNode * pNode )初始化的时候指向NULL,
new 和delete要配套使用,delete之后试该指针指向NULL,这样就可以避免被删掉的指针再次被删掉。
例如:

LNode *pNode=NULL;
//........函数代码
pNode=new LNode();//这里开辟给pNode开辟空间之后,pNode就不指向NULL了
//......函数代码

if(pNode!=NULL)//如果不指向NULL就执行下面代码
{
delete pNode;//如果开辟了数组空间就delete []pNode;
pNode=NULL;
}

回答2:

你倒数第二个while循环结束后,pNode = NULL; 所以最后一个循环的判断条件为false,不执行循环,改正办法:
stu_of_3 * pNode = head;
while(pNode != NULL)
{
cout << pNode -> name << endl;
cout << pNode -> StuNum << endl;
cout << pNode -> age << endl;
pNode = pNode -> next;
}

pNode = head;

while(pNode != NULL)
{
head = pNode -> next;

delete pNode;
pNode = head;
}