为什么这段代码不起作用? C ++

时间:2014-03-14 14:35:10

标签: c++ pointers memory-management

我正在学习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;
    }  
}

3 个答案:

答案 0 :(得分:7)

执行此操作时:

struct node *add;

您正在定义指向node的指针(您可以在此处省略struct)。但指针不指向任何有效的node对象。您必须先指向node才能执行此操作:

add->value = value;

答案 1 :(得分:2)

在执行add-&gt; value = value之前,需要为struct node * add分配空间(类似于add = new node())。

答案 2 :(得分:2)

您忘记分配指针添加指向的内存。

此外,虽然函数返回类型为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 }; }