4

次のようにノードという構造体があります。

struct node {
    int data;
}

いくつかの構造に格納されています:

struct structure {
  struct node *pointer;
}

次のようにポインターを NULL に設定しようとしています。

struct structure *elements;
elements->pointer = NULL;

なぜこのセグメンテーション違反が発生するのですか? ポインターを null に設定する前に、実際にポインターを逆参照しようとしますか?

elementsポインターから実際の構造体に切り替えて、次のことを行うと:

struct structure elements;
elements.pointer = NULL;

セグメンテーション違反を停止し、機能します。null へのポインターを設定できないのはなぜですか?

4

5 に答える 5

7
struct structure *elements;
elements->pointer = NULL;

elementsポインタはどこも指していません。無効なポインター(elementsポインター)の逆参照は未定義の動作です。

elements次のような有効なオブジェクトへのポインタを初期化する必要があります。

struct structure my_struct;
struct structure *elements = &my_struct;
elements->pointer = NULL;
于 2012-07-02T14:27:15.843 に答える
4

ポインタを初期化する必要があります

struct structure *elements = malloc(sizeof(struct structure));

これを行わないと、任意のメモリ位置を指します。

于 2012-07-02T14:27:56.790 に答える
2

逆参照している無効なポインター、したがってセグメンテーション違反は、ではなくelements->pointer、それelements自体です。設定されていないため (例: a によってmalloc)、メモリ内の任意の場所を指す可能性があります。

于 2012-07-02T14:28:07.460 に答える
1

初期化していない*elements

*elements現在、何も指していないので、何もelements->pointer逆参照していないため、セグメンテーション違反が発生します。

于 2012-07-02T14:27:20.183 に答える
0

elementsまだ何かを指すように初期化されていません。

于 2012-07-02T14:27:20.167 に答える