0

我有以下代码。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;
}
4

3 回答 3

2

您在分配之前使用 head 。这是未定义的行为。在 MinGW 系统上,它没有崩溃是纯粹的“运气”,但它仍然无效。你必须先分配头:

ListNode *head;
head = new ListNode(0);

// do some stuff

// delete head;
于 2013-11-14T23:18:48.773 回答
0

这段代码

ListNode *head;
    head->val=0;

是无效的。您没有为 ListNode 分配内存。所以你不能写 head->val=0;

于 2013-11-14T23:19:35.410 回答
0

线

head->val=0;

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

于 2013-11-14T23:19:46.193 回答