为什么有的C++程序new之后,却不delete呢?或者说,new之后,由于需要不想delete怎么办?
数据结构初学者。希望用C++,采用头插法来构建一个单链表。
我看好多博客的作者在新建一个结点时,使用new之后,却不delete(具体见函数:linkListHead)。
按我现在的理解,这样不是会造成内存泄露吗?该怎么解决呢?
#include<iostream>
using namespace std;
struct node
{
int ele;
node* next;
};
void linkListHead(node* L);
int main()
{
node* head = new node;
head->ele = 4; // 头结点的数据域存放结点的长度
head->next = NULL;
linkListTail(head);
while (head)
{
cout << head->ele << " ";
head = head->next;
}
delete head;
return 0;
}
void linkListHead(node* L)
{
for ( int i = 1; i <= L->ele; i++)
{
node* newNode = new node; // new之后,不需要delete吗?但是delete之后,该结点所占的内存也销毁了呀,这样就达不到构建单链表的目的了呀。怎么解决呀?
newNode->ele = i;
newNode->next = L->next;
L->next = newNode;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
new之后肯定要delete,否则肯定会发生内存泄漏。一般我们的策略是,在哪个类中new的内存,由哪个类负责delete。
这样不是会造成内存泄露吗?该怎么解决呢?
是会造成泄漏,代码写的有问题。怎么解决?遍历链表 delete 就可以。
new之后,不想delete怎么办?
只要实际需求有必要,那也可以不必 delete。
new newNode并插入到链表中,从你代码语意上看把newNode的所有权交给了linkedList,你的linkedList在析构的时候有必要释放这些内存,不然就会造成内存泄露。
不delete会内存泄露,但是很多时候,你的程序小,很快运行结束,一结束,所谓的泄露内存马上又找回来了。
所也不是问题,。
因为是玩具程序,所以没 delete