为什么有的C++程序new之后,却不delete呢?或者说,new之后,由于需要不想delete怎么办?

发布于 2022-09-12 03:09:22 字数 852 浏览 26 评论 0

数据结构初学者。希望用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

扶醉桌前 2022-09-19 03:09:22

new之后肯定要delete,否则肯定会发生内存泄漏。一般我们的策略是,在哪个类中new的内存,由哪个类负责delete。

我很坚强 2022-09-19 03:09:22

这样不是会造成内存泄露吗?该怎么解决呢?

是会造成泄漏,代码写的有问题。怎么解决?遍历链表 delete 就可以。

new之后,不想delete怎么办?

只要实际需求有必要,那也可以不必 delete。

鸵鸟症 2022-09-19 03:09:22

new newNode并插入到链表中,从你代码语意上看把newNode的所有权交给了linkedList,你的linkedList在析构的时候有必要释放这些内存,不然就会造成内存泄露。

绅刃 2022-09-19 03:09:22

不delete会内存泄露,但是很多时候,你的程序小,很快运行结束,一结束,所谓的泄露内存马上又找回来了。

所也不是问题,。

<逆流佳人身旁 2022-09-19 03:09:22

因为是玩具程序,所以没 delete

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文