为什么将对象作为指针传递但不在返回范围时超出范围

mreff555

制作一个非常简单的链表,我发现自己对可能是一个非常简单的作用域概念感到困惑。第一部作品符合预期。似乎在第二个makeNode函数中,节点“ n”在终止时超出范围。我很困惑为什么会这样。

我很确定分配的内存仍然存在,并且这两种方法都有指向该内存的指针。那为什么不工作呢?

该程序具有两个make节点功能

#include <iostream>
using namespace std;

struct Node
{
    int value;
    Node* next;
    Node() : next(NULL){}
};

Node* makeNode1(int value)
{
    Node* n = new Node;
    n->value = value;
    return n;
}

void makeNode2(int value, Node* mountPt)
{
    Node* n = new Node;
    n->value = value;
    mountPt = n;
}

void destroyNode(Node* mountPt)
{
    if(mountPt->next != NULL)
    {
        destroyNode(mountPt->next);
        delete mountPt;
    }
}

int main() {
    Node* origin = NULL;

    // This works
    origin = makeNode1(4);

    // causes a runtime error when dereferenced
    makeNode2(4, origin);

    return 0;
}
songyuanyao

因为makeNode2指针参数mountPt本身是按值传递的,所以函数内部对指针本身的任何修改mountPt = n;都与原始参数无关origin

您可以将其更改为通过引用,即

void makeNode2(int value, Node*& mountPt)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么自引用指针或按钮超出范围?

来自分类Dev

为什么我的R循环返回超出范围的错误?

来自分类Dev

为什么会返回超出范围的索引?

来自分类Dev

为什么访问MySQL表中的任何值时,SparkSQL总是返回超出范围的值?

来自分类Dev

当我输入超出范围的数字时,为什么它不返回任何类型?

来自分类Dev

超出范围时为什么fileinput.input对象没有丢失?

来自分类Dev

为什么索引超出范围

来自分类Dev

为什么struct变量超出范围

来自分类Dev

为什么矢量下标超出范围?

来自分类Dev

为什么会超出范围?

来自分类Dev

为什么光标索引超出范围?

来自分类Dev

为什么索引超出范围?

来自分类Dev

为什么此变量超出范围?

来自分类Dev

为什么索引超出范围?

来自分类Dev

为什么我的for循环超出范围?

来自分类Dev

为什么索引超出范围?(Python)

来自分类Dev

超出范围时使用对象?

来自分类Dev

指针是否超出范围?

来自分类Dev

当结构对象超出范围时,如何删除结构对象内部的指针?

来自分类Dev

对象指针和对象超出范围的向量

来自分类Dev

当指针超出范围时,由CComObject :: CreateInstance创建的COM对象不会被破坏

来自分类Dev

嵌套循环结构中出现“列表索引超出范围”错误,但不在此范围之外

来自分类Dev

为什么我在C ++中超出范围,但在Perl中却超出范围?

来自分类Dev

Python IndexError:使用列表作为可迭代对象时,列表索引超出范围

来自分类Dev

通过引用传递对象(将超出范围)

来自分类Dev

cppcheck超出范围时

来自分类Dev

为什么我可以在超出范围的方法中修改List而不返回它?

来自分类Dev

为什么sklearn MinMaxScaler()返回超出范围的值而不是错误?

来自分类Dev

为什么scala在此模运算中返回超出范围的值?

Related 相关文章

  1. 1

    为什么自引用指针或按钮超出范围?

  2. 2

    为什么我的R循环返回超出范围的错误?

  3. 3

    为什么会返回超出范围的索引?

  4. 4

    为什么访问MySQL表中的任何值时,SparkSQL总是返回超出范围的值?

  5. 5

    当我输入超出范围的数字时,为什么它不返回任何类型?

  6. 6

    超出范围时为什么fileinput.input对象没有丢失?

  7. 7

    为什么索引超出范围

  8. 8

    为什么struct变量超出范围

  9. 9

    为什么矢量下标超出范围?

  10. 10

    为什么会超出范围?

  11. 11

    为什么光标索引超出范围?

  12. 12

    为什么索引超出范围?

  13. 13

    为什么此变量超出范围?

  14. 14

    为什么索引超出范围?

  15. 15

    为什么我的for循环超出范围?

  16. 16

    为什么索引超出范围?(Python)

  17. 17

    超出范围时使用对象?

  18. 18

    指针是否超出范围?

  19. 19

    当结构对象超出范围时,如何删除结构对象内部的指针?

  20. 20

    对象指针和对象超出范围的向量

  21. 21

    当指针超出范围时,由CComObject :: CreateInstance创建的COM对象不会被破坏

  22. 22

    嵌套循环结构中出现“列表索引超出范围”错误,但不在此范围之外

  23. 23

    为什么我在C ++中超出范围,但在Perl中却超出范围?

  24. 24

    Python IndexError:使用列表作为可迭代对象时,列表索引超出范围

  25. 25

    通过引用传递对象(将超出范围)

  26. 26

    cppcheck超出范围时

  27. 27

    为什么我可以在超出范围的方法中修改List而不返回它?

  28. 28

    为什么sklearn MinMaxScaler()返回超出范围的值而不是错误?

  29. 29

    为什么scala在此模运算中返回超出范围的值?

热门标签

归档