Subject: Re: Can malloc return invalid memory?
To: D'Arcy J.M. Cain <darcy@druid.net>
From: Manuel Bouyer <bouyer@antioche.lip6.fr>
List: current-users
Date: 04/02/2000 15:51:01
On Sun, Apr 02, 2000 at 06:16:48AM -0400, D'Arcy J.M. Cain wrote:
> I know it sounds like an odd question but I have a very weird problem
> with Python running on -current (1.4X) as of a few days ago and, in
> fact, I have been struggling with this for a few weeks.  Here is the
> code from stringobject.c in Python.  For clarity I removed some code
> that was ifdef'd out and even if it wasn't I'm pretty sure it never
> got hit since I know it reached the code below.
> 
> PyObject *
> PyString_FromStringAndSize(str, size)
>     const char *str;
>     int size;
> {   
>     register PyStringObject *op;
>     op = (PyStringObject *)
>         malloc(sizeof(PyStringObject) + size * sizeof(char));
>     if (op == NULL)
>         return PyErr_NoMemory();
>     op->ob_type = &PyString_Type;
> 
> GDB tells me the following.
> 
> #0  PyString_FromStringAndSize (
>     str=0x9164f47 "2000:04:01:13:57:10:EST 200 931 /images/refnews.gif",
>     size=23) at stringobject.c:99
> 
> So I know that there is a string at least 23 characters and the size request
> is 23.  At this point the string is irrelevant anyway.
> 
> The program crashes on that last line with:
> 
> Program terminated with signal 11, Segmentation fault.
> 
> The value of op is 0x9233000.  When I try to print op->ob_type I get
> the following.
> 
> (gdb) p op->ob_type
> Cannot access memory at address 0x9233004.
> 
> So malloc has not returned NULL but the space it does return seems to be
> innaccessible to the program.  The only thing that is perhaps different
> about my script is that it has huge memory requirements but malloc didn't
> return an error so it isn't a matter of running out of memory.

How much memory does your program have when this happen ?

--
Manuel Bouyer <bouyer@antioche.eu.org>
--