The order of passed parameters should reflect (source --> destination) flow: Example: int dxf_ray_write (DxfFile *fp, DxfRay *ray); should become: int dxf_ray_write (DxfRay *ray, DxfFile *fp);