问答

为什么有的C++程序new之后,却不delete呢?或者说,new之后,由

作者:admin 2021-07-22 我要评论

数据结构初学者。希望用C++,采用头插法来构建一个单链表。 我看好多博客的作者在新建一个结点时,使用new之后,却不delete(具体见函数:linkListHead)。 按我现...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

数据结构初学者。希望用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;
    }
}
###

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

###

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

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

new之后,不想delete怎么办?

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

###

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

###

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

所也不是问题,。

###

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 为什么有的C++程序new之后,却不delete

    为什么有的C++程序new之后,却不delete

  • C++中类似junit的框架

    C++中类似junit的框架

  • 后台管理系统界面卡顿,需要刷新整个界

    后台管理系统界面卡顿,需要刷新整个界

  • react 数据渲染问题

    react 数据渲染问题

腾讯云代理商
海外云服务器