指针不匹配和麻烦
Pointer Mismatches & Trouble
尝试创建一个指针向量,然后将每个指针设置为NULL。然后我想让向量的某一部分连接到我分配的节点上。我对这种不匹配有一些挣扎。我还想将已经存在的内容添加到新节点的后面。任何反馈都是善意的。我总是出现隔离故障
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
的函数声明,以接收指向Node
的指针的指针。因为你想修改向量的第一个元素的内容,这是一个Node*
,你需要将Node**
传递给HTAdd
。
编辑:我的原始代码并没有真正改变要连接到您试图添加的节点的第0个向量元素。以下是您将如何做到这一点。正如您所看到的,最后两个cout
语句输出了vector的第0个元素和buggy
的内容,它们指向同一个地址。
#include <iostream>
#include <vector>
using namespace std;
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);
}
HTadd(26, &tableP[0]);
Node *buggy = tableP[0];
cout << tableP[0]->x << endl;
cout << buggy->x << endl;
cout << tableP[0] << endl;
cout << buggy << endl;
return 0;
}
使用HTadd的定义
void HTadd (int k, Node *&ptr)
像你那样正常调用它。
reason:引用一个变量意味着给同一个位置不同的名字。如果你只使用Node * ptr
,那么你只是通过值传递。即ptr
是一个局部变量,它将具有buggy
(即null
)中值的副本。对ptr
的操作不会影响buggy
。因此,当ptr
发生变化时,要对buggy
进行更改,则通过引用传递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 = new node)。现在buggy指向别的东西,但tableP[1]是不变的,即tableP[1]->rest
仍然是NULL
,所以tableP[1]->rest->x没有意义。因此存在隔离故障。为什么tableP[1]没有被挂起?因为tableP[1]是一个变量,buggy
是另一个变量,两者都是Node *类型,所以Node * buggy = tableP[1]
只是复制tableP[1]的内容到buggy;
buggy为NULL,您正在延迟它。您通过值而不是引用传递指针,因此您更改了它的内容,而不是它指向的内容。
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- 在使用累加时,C++中的运算符+不匹配
- C++ 与操作员不匹配<<
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 与'operator='不匹配(操作数类型'String'且"void")
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- C4018:类内有符号、无符号不匹配
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 为什么我收到错误:"运算符<<不匹配?
- RE2 不匹配非 ASCII 字符
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- 为什么我的数组值与此处的全局变量不匹配?
- 引号之间匹配/不匹配,带有不可避免的引号和多行
- 映射迭代器与运算符不匹配
- C++调用和定义不匹配
- 指针不匹配和麻烦