delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2003/09/03/18:03:55

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Message-ID: <3F566526.4000604@osc-es.de>
Date: Thu, 04 Sep 2003 00:03:18 +0200
From: Juergen Bohn <bohn AT osc-es DOT de>
Organization: OSC Embedded Systems
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: Ronald Landheer-Cieslak <blytkerchan AT users DOT sourceforge DOT net>,
cygwin AT cygwin DOT com, "Bill C. Riemers" <cygwin AT docbill DOT net>
Subject: Re: malloc segfaults
References: <3F549C88 DOT 9040103 AT osc-es DOT de> <20030903094303 DOT GB19365 AT linux_rln DOT harvest>
In-Reply-To: <20030903094303.GB19365@linux_rln.harvest>

Thanks for the hints.

gdb and strace show the buggy behavior on my machine.

Starting program: /cygdrive/e/verify/malloc/malltest.exe

Program received signal SIGSEGV, Segmentation fault.
0x61042e26 in strdup () from /usr/bin/cygwin1.dll
(gdb) bt
#0  0x61042e26 in strdup () from /usr/bin/cygwin1.dll
#1  0x6104326b in mmap64 () from /usr/bin/cygwin1.dll
#2  0x61043849 in mmap () from /usr/bin/cygwin1.dll
#3  0x610401bc in mktime () from /usr/bin/cygwin1.dll
#4  0x61040413 in mktime () from /usr/bin/cygwin1.dll
#5  0x610413e6 in malloc () from /usr/bin/cygwin1.dll
#6  0x004010e7 in main (argc=1, argv=0xa042630) at malltest.c:10

and

   448 1192931 [main] malltest 1472 mmap64: 630000 = mmap() succeeded
   249 1193180 [main] malltest 1472 mmap64: addr 0, len 1048576, prot 3,
flags 22, fd -1, off 0
   202 1193382 [main] malltest 1472 handle_exceptions: In
cygwin_except_handler exc 0xC0000005 at 0x61042E26 sp 0x22FCB4
   123 1193505 [main] malltest 1472 handle_exceptions: In
cygwin_except_handler sig = 11 at 0x61042E26
   118 1193623 [main] malltest 1472 handle_exceptions: In
cygwin_except_handler calling 0x0
1193743 [main] malltest 1472 handle_exceptions: Exception:
STATUS_ACCESS_VIOLATION
   120 1193743 [main] malltest 1472 handle_exceptions: Exception:
STATUS_ACCESS_VIOLATION

The wrapper from Bill Riemer's reply works, at least when I wrap my own 
malloc() calls.

More tips are still appreciated.

Best regards,
Juergen

Ronald Landheer-Cieslak wrote:
> Your code may have an unexpected side-effect: printf allocates memory as well.
> Try using this:
> 
> #include <stdlib.h>
> 
> int main(void)
> {
>    void * x;
> 
>    x = malloc(1000000);
>    while (x != NULL)
>    {
>       x = malloc(1000000);
>       if (x == NULL)
>          write(2, "malloc returned NULL\n", 21);
>    }
>                   
>    return(0);
> }
> 
> I've tested it under gdb and with strace, both say "malloc returned NULL". OTOH,
> when simply run from the command-line, I do get a segmentation fault.
> 
> HTH
> 
> rlc
> 
> On Tue, Sep 02, 2003 at 03:35:04PM +0200, Juergen Bohn wrote:
> 
>>Tested with cygwin1.dll 1.5.3-1 and 1.3.22-1 on Win2000-SP4, malloc() does 
>>not (always)
>>return NULL if there is no more memory available.  Try, for example, simple 
>>loops like:
>>
>>  x = malloc(10000);
>>  for (i=0; x != NULL; i++)
>>  {
>>      x = malloc(10000);
>>      if (x == NULL)    printf("x is NULL\n");
>>  }
>>
>>My application terminates with a segmentation violation, but all attempts 
>>to handle this by signal() or atexit() fail.  Unfortunately, also sysconf() 
>>does not work to get the number of available pages (_SC_AVPHYS_PAGES, I get 
>>always the same but wrong value).
>>
>>While testing, I detected that errno is set to 12 ("Not enough memory") 
>>after enough iterations through the for-loop above, while variable x still 
>>is not zero.  But still my application crashes even when I break the loop 
>>at errno!=0.
>>
>>Is there any secure way to find out, how much memory is available (or hope 
>>that the malloc() problems will be solved)?
>>
>>Many thanks,
>>Juergen
>>
>>
>>
>>--
>>Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
>>Problem reports:       http://cygwin.com/problems.html
>>Documentation:         http://cygwin.com/docs.html
>>FAQ:                   http://cygwin.com/faq/
> 
> 




--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


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