ワイルドポインタのデバッグ
ワイルドポインタのバグに悩まされていた訳ですが、
数日前に寝ている間に閃いて、そのまま忘れてた事を今、
思い出しました。(´Д`;)
[yoya@dev src]$ grep union *.h swf_fill_style.h:typedef union swf_fill_style_ { swf_fill_style_gradient.h:typedef union swf_fill_style_gradient_ { swf_fill_style_solid.h:typedef union swf_fill_style_solid_ { swf_gradient.h:typedef union swf_gradient_ { swf_gradient_record.h:typedef union swf_gradient_record_ { swf_line_style.h:typedef union swf_line_style_ { swf_shape_record.h: union { swf_shape_record_edge.h:typedef union swf_shape_record_edge_ { swf_shape_record_end.h:typedef union swf_shape_record_end_ { swf_shape_record_setup.h:typedef union swf_shape_record_setup_ {
swf_shape_record が可変長データかつ、タイプによって構造が変わるので、 struct と union の組み合わせで表現したのですけど、
typedef struct swf_shape_record_ { union { unsigned char first_6bits : 6; swf_shape_record_end_t shape_end; swf_shape_record_setup_t shape_setup; swf_shape_record_edge_t shape_edge; } shape; struct swf_shape_record_ *next; } swf_shape_record_t;
その union 定義をコピペした先で、普通の struct まで union にしちゃってました。
そりゃ壊れるゎ…