calling Pyrex results from C
Kyler Laird
Kyler at Lairds.com
Wed Jan 21 12:16:54 EST 2004
On Wed, Jan 21, 2004 at 08:23:53AM -0800, Paul Prescod wrote:
> First, I'd suggest that "integer" is a perfectly good type in both C and
> Pyrex so you shouldn't pass around Python objects representing integers.
That would be my inclination too if I just had an integer to pass.
Are you suggesting that I should pass tuples of integers as pointers
to (an array of) integers?
> Second, you aren't checking the return codes of your functions and C has
> no exception handling, tracebacks, etc. image_size is probably returning
> 0 because it is probably throwing an exception because you are asking
> for the size attribute of the Image class rather than the image_PIL object.
I'm trying to keep my examples simple so that it's easy to pick out the
mistakes.
> Once I fix the Image/Image_PIL error your code runs okay on my computer.
Grrr...yup, that does it. Dumb mistake - the result of pulling code
out of various places and gluing it together without checks.
> But you are walking on thin ice and may just be lucky. It is simply
> not possible to work with strings generated at runtime in C without
> worrying about memory allocation sometime. In this case I have the
> strong suspicion that the string() function is either creating and
> destroying a string object and then returning you a pointer to the dead
> object's internal memory buffer (bad news!) or simply losing a reference
> to the (still living) string object: still not a good thing. Eyeballing
> the code I believe the former is the issue. You could check for sure by
> adding some printf's to the generated code to look at __pyx_v_s->ob_refcnt.
I feared this was a problem. I'll play with it.
> Why not let Python do the "print" rather than using "printf".
Printing is not always my final goal.
Thank you.
--kyler
More information about the Python-list
mailing list