delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1999/06/30/17:03:43

From: "Christopher Nelson" <paradox AT gye DOT satnet DOT net>
To: <djgpp AT delorie DOT com>
Subject: Re: malloc causing GPF?????????????
Date: Wed, 30 Jun 1999 14:51:50 -0600
Message-ID: <01bec33a$607bd400$LocalHost@thendren>
MIME-Version: 1.0
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 4.71.1712.3
X-MimeOLE: Produced By Microsoft MimeOLE V4.71.1712.3
Reply-To: djgpp AT delorie DOT com

>I am writing a program. Today, when it was running, it
>suddenly exited with a GPF! when i used Symify to know
>the cause of the problem, it showed that malloc was
>the function at top of stack!!!!! (i.e. It was the one
>being executed!)... I was very perplexed! I dunno how
>to begin debugging!! I don't even know the cause of
>the problem!


usually when that happens it's because you have rogue pointers floating
around somewhere in your program.

>i) Could the problem be in MY OWN code? How? Why did
>the GPF occur in malloc itself?? What kind of bugs can
>cause this GPF? how can I know the cause of the
>problem?

often a rogue pointer can overrun some of that information that malloc uses
to keep track of memory blocks.  that can cause malloc to have a heartattack
and die.

>ii) Did a similar problem occur to anyone? did he know
>the cause of it? if so, would u please tell me how did
>it happen?

it's happened to me several times, and usually it's because i wrote messy
code.

>iii) Could the problem be in malloc itself?? My
>program calls malloc() and free() TONS of
>times!!(about 800 times, and may  be larger!). Is
>there a problem regarding malloc and free when called
>a LOT of times? If this is the cause, what is the
>solution? I have some replacements for malloc. but i
>want to know HOW to compile the libraries? (The only C
>compiler i have is DJGPP)

it IS possible to fragment the allocation heap so much that you can't get
enough memory, but that doesn't usually cause malloc to die, it just returns
a 0.  i don't think that calling malloc and free some 800 times is a
problem.  i have a library that makes thousands and thousands of allocations
(it's a testbench for a heap-allocation routine that uses malloc as a
backing store), and it has no problem.

another good way to check this is to use YAMD or something similiar.  (it's
a malloc debugger-keeps track of memory usage and helps catch rogue pointers
by terminating the program as soon as a pointer writes somewhere it ought
not.  in addition, it can pad the memory blocks to check ans see if you're
doing buffer over and under runs.

    -={C}=-

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019