Index: [thread] [date] [subject] [author]
  From: Christoph Egger <Christoph_Egger@t-online.de>
  To  : GGI-Mailing-Liste <ggi-develop@eskimo.com>
  Date: Mon, 12 Jul 1999 16:07:44 +0200 (MEST)

Re: hacking methods to find out bugs

Hi all!

At first thanks to all who have given me advertisements!!

Now I am despairing!! I don't know where the bug is. Here are code-snips,
where I assume the bug is...




	if (use_mathtype == USE_FIXPOINT) {
		fixcontext = (fix_3Dcontext_t *)context;

printf("__3dtk_init: call fix_3Dcontext_init, context is %p\n", fixcontext);

                fix_3Dcontext_init(fixcontext);

printf("__3dtk_init: fix_3Dcontext_init called, context is %p\n", fixcontext);

printf("__3dtk_init: calling fix_polygon_init\n");
                if ((fixcontext == NULL) || (fix_polygon_init(fixcontext) == ENOMEM))
                {
                        fix_3Dcontext_done(fixcontext);
                        __3dtk_panic("Not enough memory\n");
                } // if
                fix_lights_init();
                fix_world_init();
        } else {
                flocontext = (flo_3Dcontext_t *)context;

                flo_3Dcontext_init(flocontext);
                if ((flocontext == NULL) || (flo_polygon_init(flocontext) == ENOMEM))
                {
                        flo_3Dcontext_done(flocontext);
                        __3dtk_panic("Not enough memory\n");
                } // if
                flo_lights_init();
                flo_world_init();
        } // if

The output of gdb is:

__3dtk_init: call fix_3Dcontext_init, context is (nil)
__3dtk_init: fix_3Dcontext_init called, context is (nil)
__3dtk_init: calling fix_polygon_init

Program received SIGSEGV, Segmentation fault
0x400d7267 in fix_bitmap_done

The fix_bitmap_done-routine is called by fix_3Dcontext_done. But because
of the output by gdb I assume that the error is in the
fix_3Dcontext_init-Routine. The pointer returned by fix_3Dcontext_init
needn't be nil!

Here the implementation of fix_3Dcontext_init:

void fix_3Dcontext_init(fix_3Dcontext_t *context)
{
        context = (struct fix_3Dcontext_t *)malloc(sizeof(struct fix_3Dcontext_t));
        if (context == NULL)
                __3dtk_panic("Not enough memory!!\n");

        CAMERA(context) = (struct fix_camera_t *)malloc(sizeof(struct fix_camera_t));
        fix_camera_init(context);

        fix_bitmap_init(context);
        fix_CalcViewspaceFrustum(context);

        context->z_buffer = create_bitmap(sizeof(fix_t)*8,
                BITMAP(context)->width, BITMAP(context)->height);
} // fix_3Dcontext_init


Can anyone explain this paradox?
 

Christoph Egger
E-Mail: Christoph_Egger@t-online.de

Index: [thread] [date] [subject] [author]