0

リストを次のように定義します。

typedef struct LinkNode LinkNode;
struct LinkNode {
     int value;
     LinkNode *next;
};

そして、main() でこの LinkNode タイプを使用します。

int main()
{
    LinkNode *p;
    ...
}

VS2010 でシングルステップ デバッグを行うと、デバッガーがローカル変数 p の値を 0xcccccccc{value = ??? と表示することがあります。next = ???} ですが、私が混乱しているのは、場合によっては p->value と p->next の値がデバッグ中に隠され、p の値が Oxcccccccc と表示されることです。(メンバーシップの値は見えません)

これらの表現の背後にあるメカニズムが何であるかはわかりません。ほぼ同じコード (変数名は異なるがデータ構造は同じ) で 2 つのプロジェクトをテストしたところ、結果は上記のようになりました。だから問題は何ですか?

ありがとう!

4

1 に答える 1

2

LinkNode *p初期化されていないポインタです。最初にオブジェクトを構築する必要があります。これは、書き込みのようなもので、何を指しているint* aかを確認しようとします。a次のようなものを書く必要があります。

struct LinkNode {
     LinkNode(int value = int(), LinkNode* next = nullptr) :
               value(val), next(next)
     {
     }

     int value;
     LinkNode *next;
};

int main()
{
    LinkNode* p = new LinkNode();
    ...
    delete p;
}

編集
c では、malloc と free を使用する必要があります... new と delete は許可されていません。

typedef struct LinkNodeTag {         
     int value;
     struct LinkNodeTag *next;
} LinkNode;

LinkNode a = malloc(...);
free(a);

残念ながら、malloc と free がどのように機能するかは覚えていません...

于 2012-12-10T10:38:43.860 に答える