昨夜、アプリケーションの segfault を追跡するのに恥ずかしい時間を費やしました。最終的に、私が書いたことが判明しました:
ANNE_SPRITE_FRAME *desiredFrame;
*desiredFrame = anne_sprite_copy_frame(&sprite->current);
それ以外の:
ANNE_SPRITE_FRAME desiredFrame;
desiredFrame = anne_sprite_copy_frame(&sprite->current);
1 行目で型付きポインターを作成し、2 行目で逆参照ポインターの値を によって返される構造体に設定しますanne_sprite_copy_frame()
。
なぜこれが問題になったのですか?そして、なぜコンパイラはこれをまったく受け入れたのですか? 私が把握できるのは、例 1 の問題が次のいずれかであるということだけです。
- ポインター用のスペースを予約していますが、ポインターが指す内容は予約していません。または
- (ありそうもない) 戻り値をポインタ自体のメモリに格納しようとしている