2017-08-04 28 views
1

構造体の配列内にある整数へのポインタを逆参照する問題が正しく発生しています。コードの関連部分は次のとおりです。C構造体の整数ポインタを参照解除する

typedef struct hf_register_info { 
    int     *p_id; /**< written to by register() function */ 
    header_field_info  hfinfo; /**< the field info to be registered */ 
} hf_register_info; 
. 
. 
hf_register_info hf[MAX_HF_COUNT]; 
. 
. 
*(hf[i].p_id) = -1; 

最後のコード行は例外です。 p_idを正しく尊重するにはどうすればよいですか?

ポール

+3

はい、構文は正しく、あなたはまた、paranthesesを削除することができます。 'p_id'はどこを指していますか? – mch

+2

ポインタは実際にどこでも有効ですか?さもなければ、ポインタの逆参照は*未定義の振る舞いにつながります*。 –

+1

なぜそれらがコードの唯一の関連部分であると仮定していますか?つまり、あなたはすでに問題が何であるかを知っていれば、なぜここで尋ねていますか? – melpomene

答えて

0

あなたのポインタを初期化する必要があります。あなたの構造体のポインタは、配列を初期化する瞬間には何も指していません。

あなたの配列内のすべての構造体について、ポインタを逆参照して値を代入したい場合は、まずメモリ内に領域を割り当てる必要があります。

hf_register_info hf[MAX_HF_COUNT]; 

// some code here 

hf[i].p_id = malloc(sizeof(int)); // or unsigned long or whatever 
*(hf[i].p_id) = -1; 
+0

もちろん、ありがとう。 –

関連する問題