c++ - 是否有必要使用 'new' 分配一个新指针,指向一个与先前存在的指向同一结构的指针相同的结构?如果是这样,为什么?

标签 c++ pointers struct new-operator

我正在编写一个函数,用于在单向链表中插入一个新元素。

该函数接受 *head 到列表,要放入新元素的数据和 l-list 中的位置应插入。

This是编程练习的链接,以防我不够清楚。

以下代码完美运行-

/*
  Insert Node at a given position in a linked list 
  head can be NULL 
  First element in the linked list is at position 0
  Node is defined as 
  struct Node
  {
     int data;
     struct Node *next;
  }
*/

Node* InsertNth(Node *head, int data, int position)
{
    //Takes head of list as input and returns it after inserting a new element
    //with `data` at `position` in the l-list

    Node *temp = new Node;
    temp = head;
    Node *newn = new Node;
    newn->data = data;

    if(position == 0){
        newn->next = head;
        return newn;
    }

    while(--position){
        temp = temp->next;
    }
    newn->next = temp->next;
    temp->next = newn;

    return head;
}

但是,我不明白为什么我必须使用 Node *temp = new Node; temp = head;.

为什么简单地使用 Node *temp = head; 不起作用? 我只使用临时指针遍历 l 列表,以便在返回最终列表时保留头部的位置。

编辑 - 我知道 Node *temp = head; 是要走的路。这也是我最初对其进行编程的方式,但我忘了提及这是给我一个段错误的原因。当我将其更改为 Node *temp = new Node; temp = head; 它适用于所有测试用例(包括 head 为 NULL 的测试用例)。

我想知道为什么这种看似荒谬的内存分配似乎必须让它起作用。

最佳答案

您在上面发布的代码泄漏。

Node *temp = new Node; temp = head;

这样不好。

Node *temp = head;

这样更好。

你的代码还有其他问题;但是您认为 new 然后立即重新分配指针很愚蠢的分析是正确的。发现得很好。

关于c++ - 是否有必要使用 'new' 分配一个新指针,指向一个与先前存在的指向同一结构的指针相同的结构?如果是这样,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38381342/

相关文章:

C++ LoadLibrary 不工作

c++ - 在 C++ 中正确地过载电源?

c++ - 寻找已排序的容器,其中指向元素的指针在添加/删除时不会改变

C++——指向结构数组的指针包含指向不起作用的类数组的指针

c++ - 基本 C++ : How do I initialize a struct member of a class?

c++ - 具有正确链接库的 undefined reference

c++ - 从 MPI_Scatter 到 MPI_Scatterv

c - char *s[] 和 char (*s)[] 有什么区别?

c++ - 如何声明一个指向二维浮点矩阵的指针?

c - 在有限制的情况下玩一会儿 - C 编程