0

当通过链表移动并创建一个临时指针来移动它时,我们是否必须删除 tmp 指针或者它会自动删除。我理解分配新内存,使用 new 运算符我们需要删除为指针分配的内存,然后将指针设置为空,但如果我们只有一个指针,即

Node*follow=head; //where head is a pointer to a linked list

最后我们需要删除关注吗?即使它没有分配新内存我只是用它来移动列表?

int countNum (Node *head, int key)
{
    int count=0;

    if (head == nullptr)
        return 0;

    Node *follow=head;

    while (follow != nullptr) 
    {
        if(follow->val == key)
            count++;

        follow=follow->next;
    }

    cout << count;
    return count;
}

int main()
{
    Node *head = (1,cons(2,cons(2,(cons(4,(cons(5,nullptr)))))));

    int counts=0;

    counts= countNum(head,2);

    cout<< counts<< head;
    return 0;
}

我试图遵守这一点,但它崩溃并说 int counts=0; 是线程断点吗?并且我的 Node*head=(1,cons(2,cons(2,(cons(4,(cons(5,nullptr))))))); 正在使用中。。

4

2 回答 2

0

您不需要删除“指针”(实际上不应该),因为删除是针对已分配内存的。指针只是一种引用分配内存部分的方法。

这段代码...

delete ptr;

...不会删除名为ptr- 的指针,而是删除.指向的已分配内存ptr。其实它的效果和这段代码是一样的:

ptr2 = ptr;
delete ptr2;

因为同样,它正在删除相同的分配内存,因为ptrptr2指向同一个地方。指针本身的名称/位置无关紧要;他们指出的地方才是最重要的。

于 2013-11-10T22:33:17.647 回答
0

声明指针就像声明任何(int、double 等)变量。当您在指针上删除时,您删除的是指针指向的内存,而不是指针本身。

于 2013-11-10T22:37:57.513 回答