尝试创建一个指针 vector ,然后将每个指针设置为NULL。然后,我想使 vector 的特定部分连接到我分配的节点。我因不匹配而有些挣扎。我还想将已经存在的内容添加到新节点的后面。任何反馈都是友善的。我不断出现段错误。

struct Node{
    int x;
    Node* rest;
};

void HTadd (int k, Node *ptr)
{

    Node* temp = new Node
    temp->x = k;
    temp->rest= ptr;
    ptr = temp;
}


int main ()
{
    vector <Node *> tableP;
    for (int i = 0; i < 10; i++){
    tableP.push_back(NULL);}

    Node * buggy = tableP[0];
    HTadd(26, buggy);
    cout << buggy->key << endl;


    return 0;
}

最佳答案

照这样使用HTadd的定义

void HTadd (int k, Node *&ptr)

像平常一样称呼它。

原因:引用变量意味着对同一位置使用不同的名称。如果仅使用Node * ptr,那么您只是按值传递。即ptr是一个局部变量,它将在buggy(即null)中具有值的副本。您对ptr所做的操作不会影响buggy。因此,要在更改buggy时更改ptr,请按引用传递buggy。因此应将ptr声明为reference to a pointer to Node
编辑:现在按照下面的注释Node * buggy = tableP[1];将使 buggy 保存new node返回的地址(tableP [1]保留此地址)。现在,在调用HTadd(26,buggy);之后,ptr = temp为 buggy 赋予了一个新值(coz temp =新节点)。现在 buggy 指向其他东西,但tableP [1]不变,即tableP[1]->rest仍然是NULL,因此tableP [1]-> rest-> x没有任何意义。因此段错误。
为什么未取消tableP [1]? coz tableP [1]是一个变量,buggy是另一个变量,都是Node *类型,因此Node * buggy = tableP[1]将tableP [1]的内容复制到 buggy ;

08-17 00:23