2017-02-02 4 views
-1

私はポインタの理解が多少あると思っていましたが、自分のコードに問題があります。それはクラッシュし続けます。ポインタのトラブルC

スタックにアクセスしてその内容をb1に渡そうとするたびに、プログラムがクラッシュします。

int base(int l, int base, int *stack[2000]) 
{ 
    int b1; //find base L levels down 
    b1 = base; 

    while (l > 0) 
    { 
     b1 = *stack[b1 + 1]; 
     l--; 
    } 

    return b1; 
} 

EDIT:プログラムは、スタックアーキテクチャを使用する仮想マシン割り当てです。私が渡しているのは、現在のベースアクティベーションレコードと、私がアクセスしようとしている辞書的レベルです。簡単に言えば、整数です。私は、ポインタを介して私のスタックにアクセスしていると私はにする必要がありますアクティベーションレベルのベースを返すが、私は完全にポインタを使用している場合私は完全にはわからない。

+1

コードが何をすべきかについての説明と、クラッシュ時に渡すパラメータを含めると便利です。 – jayjay

+0

@jayjay更新 – RiGid

+0

エラーが表示されますか? –

答えて

0

あなたはポインタに余分な時間を逆参照していて、最初の宣言に余分な星を追加していることを確かめてください。あなたの編集が示唆するように、あなたの関数は、整数の配列を受け入れる場合、

int base(int l, int base, int stack[2000]) 

int *stack[2000]としてそれを宣言する整数へのポインタの配列ではなく、整数の配列です。その後、だけではなく、整数へのポインタを逆参照の配列のうち、整数を得るためにb1 = *stack[b1 + 1];を変更する必要があります。

b1 = stack[b1 + 1]; 

最後に、あなたは、同じ行にb1を宣言し、割り当てることができます。

int b1 = base; 

しかし、実際には、b1はまったく必要ありません。 lは、Cが値渡しであるという事実に基づいて減算できるので、問題なく同じ方法でbaseを再割り当てすることができます。