在某些编译器中发生了分段错误,而在其

时间:2013-11-14 23:13:37

标签: c++ linked-list

我有以下代码。 ubuntu12.04中的编译器g ++告诉我有分段错误。但是当我在MingW g ++编译器中尝试相同的代码时,它会通过。

有什么想法吗?

#include<iostream>
using namespace std;

class ListNode{
    public:
        ListNode *next;
        int val;
        ListNode(int x):val(x),next(NULL){};
    };

    int main(){
        ListNode *head;
        head->val=0;
        ListNode *p=head;


        for(int i=1;i<=10;i++){
            p->next=new ListNode(i);
            p=p->next;
        }
    return 0;
}

3 个答案:

答案 0 :(得分:1)

在分配之前你正在使用head。这完全是undefined behaviour。在系统上它没有崩溃它只是“运气”,它不是崩溃,但它仍然不起作用。你必须首先分配头

ListNode *head;
head = new ListNode(0);
// head->val=0; not neccessary

// do some stuff

// delete head;

在您必须删除队列中的所有之后(就像在循环中分配它们一样)。

答案 1 :(得分:0)

此代码

ListNode *head;
    head->val=0;

无效。你没有为Lis​​tNode分配内存。所以你不能写head-&gt; val = 0;

答案 2 :(得分:0)

该行

head->val=0;

访问一个对象头应该指向的成员变量val,但是head还没有指向任何对象。