创建节点时指针的 C++ 问题

标签 c++ pointers

所以我尝试使用一些我必须使用的给定函数将 BST 转换为 DLL。在这样做的同时,我不断遇到段错误。当我尝试调试它时,我终于来到了这里。我在下面写了一个非常简单的测试脚本。

我对指针的了解是它是通过引用传递的,就像我正在更改传递的指针指向的值/对象一样,它反射(reflect)在我的原始调用函数中。

为什么当我创建一个新节点然后传递指针(myf)时,它工作,但是当我只是传递指针并在函数内部创建新节点时,它显示段错误(myf2)?

如果这是因为新节点超出范围,请再次检查函数“myf”。我创建了一个由我的原始节点指向的新节点。并且this的值在函数调用结束后保留​​。这不也超出了范围吗?

我对它出现的指针有一些基本的基本问题,这真的很有帮助。谢谢

#include<iostream>
using namespace std;

class Node
{
public:
    int val;
    Node *left;
};

void myf(Node *a)
{
    a->left = new Node();
    a->left->val = 20;
    a->val = 15;
}

void myf2(Node *a)
{
    a = new Node();
    a->val = 35;
}

int main()
{
    Node *a = NULL, *b = NULL;
    a = new Node();
    a->val = 5;
    myf(a);
    cout << "New value of a = " << a->val << endl;
    cout << "left value of a = " << a->left->val << endl;
    myf2(b);
    cout << "New value of b = " << b->val << endl;
}

最佳答案

您的问题是,您的指针未设置为 b,为此,您需要将 myf2 编辑为如下内容:

void myf2(Node **a)
{
    *a = new Node();
    (*a)->val=35;
}


然后像这样调用myf2:

myf2(&b);


我相信这应该可以解决您的问题。


不要将 Node *b 仅视为一个指针,也可以将其视为一个整数,因为指针分解为一个整数,指向内存中的一个空间。

因此,您将指针(整数)的指针传递给函数。

另一个例子是:

void myfunction(int *i) {
    *i = 5;
}

int main(int argc, char** argv) {
    int x;
    myfunction(&x);
    cout << x << endl;
    return 0;
}

但这是使用实际整数。

关于创建节点时指针的 C++ 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22124909/

相关文章:

c++ - 获取指向数组末尾的指针

c++ - 使用 boost::asio 在同一主机上多播消息

c++ - 是否可以判断交互式用户 session 是自动启动还是用户手动登录?

c++ - 我看到许多使用 "Foo ^ bar"的 C++ 示例 - 什么是 "^"?

c++ - 当输入到结构点中的双指针数组时程序崩溃

c++ - 基本的c++指针问题

pointers - cgo指针值改变

c++ - 依赖范围;前面需要typename;

c++ - 在容器中使用时断言在 boost::intrusive_ptr 中触发

c - 为什么这种对指针数组的赋值不给运行时错误有效?