0

アセンブリ コードを読み取り、それが何をするかを理解し、それを C コードとして記述するという課題があります。ただし、指定された C コードの使用方法を理解するのに苦労しています。これは次のとおりです。

typedef struct ELE *tree_ptr;

struct ELE {
    long val;
    tree_ptr left;
    tree_ptr right;
};

このプロトタイプの場合 (問題がある場合):

long traverse(tree_ptr tp);

適切に作成し、その val フィールドを設定して、印刷する方法を教えてもらえますか? これにより、セグメンテーション違反が発生します。

int main () {
    tree_ptr tp;
    tp->val = 5;
    //printf("%lu\n", tp->val);
}
4

2 に答える 2

2

tree_ptr本当にただのELE *です。重要な部分はそれ*です。ポインタです。メモリが必要です。ポインタを使用するには、ポインタを有効なメモリアドレスに関連付ける必要があります。いくつかの可能なオプションは次のとおりです。

オプション1:

tree_ptr tp;
tp = malloc(sizeof(*tp)); // allocate memory for it, don't forget to free() it!

オプション2:

struct ELE tp; // Don't even use a pointer at all...
于 2013-02-22T06:15:29.467 に答える
1

tree_ptrへのポインタですstruct ELE

したがって、コードは次のようになります

struct ELE * tp;
tp->val = 5;

上記のコードでは、 へのポインタを作成しましたがstruct ELE、実際には有効なメモリ領域を指していません。

コードを修正するには、これを試してください

// allocation on heap
tree_ptr tp = malloc(sizeof(struct ELE));
tp->val = 5;

またはあなたが試すことができます...

// allocation on stack
struct ELE tp;
tp.val = 5;
于 2013-02-22T06:13:13.973 に答える