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;

head が指すはずのオブジェクトのメンバー変数 val にアクセスしますが、head はまだどのオブジェクトも指していません。

于 2013-11-14T23:19:46.193 に答える