Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
465 views
in Technique[技术] by (71.8m points)

为什么有的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;
    }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...