【问题标题】:Why this code is not working? C++为什么这段代码不起作用? C++
【发布时间】:2014-03-14 14:35:09
【问题描述】:

我正在学习 cpp,需要一些帮助。 我的代码不起作用,它停在add->value = value

typedef struct node node;
struct node{
    int value;
    struct node *next;  
};

node *top; 

int insert(int value){
    struct node *add;
    cout<< "here it stops";
    add->value = value;
    add->next = NULL;

    if(top == NULL ){
        top == add;
    }else{
        add->next = top;
        top =  add;
    }  
}

【问题讨论】:

  • add 没有初始化,所以它没有指向任何地方。
  • 你确定那是 C++ 吗?对我来说它看起来像 C。
  • 对于C++,不需要typedef,声明时也不需要重复struct。如果您要学习“C++ 作为更好的 C”,请使用其中的好处。
  • 作为参考,下次包括编译器抛出的错误/警告(或者提到它没有发出任何如果是这种情况)。

标签: c++ pointers memory-management


【解决方案1】:

当你这样做时:

struct node *add;

您正在定义一个指向 node 的指针(您可以在此处省略 struct)。但是指针没有指向任何有效的node 对象。您必须先使其指向node,然后才能执行此操作:

add->value = value;

【讨论】:

  • 事实上,讽刺的是他没有初始化一个指向节点的指针。
  • “定义”!=“初始化”,@juan.
  • @LightnessRacesinOrbit 正确,但两者兼而有之。还是编辑了。
  • @sehe 是的,他默认初始化它,这并没有多大用处。
  • @juanchopanza:嗯,很好,但我们通常不认为指针的默认初始化是任何有意义的“初始化”,当然当整个问题是他没有执行有意义的初始化!或者,为了挑剔,OP 真的没有初始化任何东西,因为默认初始化是为他执行的。
【解决方案2】:

在你做add->value = value之前,你需要为struct node *add分配空间(类似于add = new node())。

【讨论】:

    【解决方案3】:

    你忘了分配指针 add 指向的内存。

    您的函数虽然返回类型为 int,但什么也不返回。

    函数可能如下所示

    void insert( int value )
    {
        node *add = new node;
    
        add->value = value;
        add->next = top;
    
        top =  add;
    }  
    

    或者如果你的编译器支持列表初始化,那么

    void insert( int value )
    {
        node *add = new node { value, top };
    
        top =  add;
    }  
    

    或者在一行中:)

    inline void insert( int value ) { top = new node { value, top }; }  
    

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 2017-05-24
      • 2010-09-18
      相关资源
      最近更新 更多