我有一个非常简单的结构
struct Node{
Node* pNext;
int nValue;
};
我试图总是添加到非空的pNext。
Node *head;
void add(int nValue){
if (!head)
{
Node *node = new Node;
node->nValue=nValue;
head = node;
}
else
{
add(head,nValue);
}
}
void add(Node *pNode, int nValue){
if (!(pNode->pNext))
{
Node *node = new Node;
node->nValue=nValue;
pNode->pNext = node;
}
else
{
add(pNode->pNext,nValue);
}
}
当我打电话给add(10);第一次,它将头指针设置为实例化的节点。但是当我再次调用该方法时添加(9);我得到一个“访问冲突读取位置0xCDCDCDCD”。
我的问题是,如何检查pNext节点是否分配了地址?
我尝试使用== nullptr但无济于事。
答案 0 :(得分:4)
你没有初始化pNext指针,所以它可能有一些随机值。
尝试使用此声明:
struct Node{
//Default constructor, which sets all values to something meaningful
Node():pNext(nullptr), nValue(0) {}
Node* pNext;
int nValue;
};
答案 1 :(得分:0)
将您的代码更改为:
Node *head;
void add(int nValue){
if (!head)
{
Node *node = new Node;
node->nValue=nValue;
**node->pNext =NULL;**
head = node;
}
else
{
add(head,nValue);
}
}
void add(Node *pNode, int nValue){
if (!(pNode->pNext))
{
Node *node = new Node;
node->nValue=nValue;
**node->pNext =NULL;**
pNode->pNext = node;
}
else
{
add(pNode->pNext,nValue);
}
}
答案 2 :(得分:0)
您忘了将head
设置为NULL
开始,并在新创建的节点中将pNext
设置为NULL
。
与...相反Java,C ++不会自动将变量初始化为0(或等效变量)。
答案 3 :(得分:0)
您需要在pNext
的构造函数中明确地将nullptr
设置为node
来正确初始化0xCDCDCDCD
。 {{1}}始终是访问未初始化内存的指标。