2012-02-28 21 views
-3

における関数ポインタのアレイを使用している間、私はこのコードを持っている:セグメンテーションフォールトC

int main() 
{ 
    unsigned char c; 
    enum state_t { 
     state1, 
     state2, 
     state3 
    } states; 
    enum state_t (*action[3])(char c); 

    state=state1; 
    initialize_state(action); 
} 

void initialize_state (enum state_t (*action[])(char c)) 
{ 
    action[state1]=func1; 
    action[state2]=func2; 
    action[state3]=func3; 
} 

をIはinitialize_state(action);でセグメンテーションフォールトを得ます。

+1

私は 'state_t'は、あなたが関数を返すようにしたいならば、ローカル型であるとは思いません。それをグローバルにしてみてください。 –

+1

http://sscce.org/を参照してください。 – ruakh

+1

実際、それはそのままで、これはコンパイルされません。あなたの問題を正確に表している適切で、十分にテストされたコードを投稿してください。 –

答えて

2

segfaultはメモリへの不正な参照を意味するので、無効な関数ポインタアドレスを渡していないことを確認してください。

segfaultがどこにあるのかを正確に把握するために、デバッガでコードを実行しましたか?そうでない場合は、そうすることをお勧めします。あなたのコード断片はそのままコンパイルされません。

http://www.newty.de/fpt/fpt.html#arrays < - 関数ポインタの配列を使用します。

1

あなたのコードは完全に混乱しています。プロトタイプ宣言がなく、関数がmain以下で宣言されていないか、int main(void)で戻り値の型がない、main()...などのvoidが見つからない、おそらくfunc1、func2、 func3も間違っています。例えばvoid func1(void){}

関連する問題