horribly slimy segault c-extension
Carl Banks
imbosol at aerojockey.com
Sat May 31 18:16:29 EDT 2003
John Does wrote:
> There should be no need for me to show all my code for this issue.
>
>
> First off: i run a program and it sefaults normally, but when i run it
> through gdb it does not.
>
> Here are the relevant lines of code:
>
> printf("q:%i \n",Q->ob_refcnt);
> Py_DECREF(Q);
> printf("qa:%i \n",Q->ob_refcnt);
> Q = newQ ;
> printf("qaa:%i \n",Q->ob_refcnt);
>
> And the output:
>
> q:1
> Segmentation fault
>
> Without asking me for any more code, can someone give me some
> precise steps that I could take to begin resolving/exposing this
> issue.
First thing to try:
printf("q:%i \n",Q->ob_refcnt);
Py_DECREF(Q);
/* printf("qa:%i \n",Q->ob_refcnt); */
Q = newQ ;
printf("qaa:%i \n",Q->ob_refcnt);
You're trying to access Q after its refcount fell to zero. Py_DECREF
frees the memory pointed at by Q when that happens. Trying to access
freed memory (as your printf does) is an undefined operation, and
could very well segfault.
Just a guess, does the DECREFed object have a large memory footprint
(say, more than 8K)?
--
CARL BANKS
More information about the Python-list
mailing list