尝试创建一个指针 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 ;