I am having a strange issue to do with making an FFI binding to some simple C functions which immediately result in a segmentation fault. In these functions, all arguments are pass by value, and all return values are values, not pointers. I am wondering if there is an issue with the FFI that getting a struct as a return value is causing some issues, or passing a cstruct by value. I can think of no other reason that this could be happening.
For example, I have the simple definition in Racket: (define cpv (get-ffi-obj "_cpv" chipmunk (_fun _cpFloat _cpFloat -> _cpVect))) where chipmunk is a binding to a valid ffi-lib. This corresponds to the C function: static inline cpVect cpv(const cpFloat x, const cpFloat y) { cpVect v = {x, y}; return v; } Calling cpv in Racket at any point will immediately cause a segmentation fault. Is my theory about why this is happening correct? Or is there something else going on that I am unaware of? I realize this is a small function that could easily be re-defined in Racket (the current FFI bindings to Chipmunk do this, actually, possibly because the developer ran into the same issue I am), but it seems important to know why this is happening so as to avoid it in the future either with this FFI binding, or any others I might put together. ____________________ Racket Users list: http://lists.racket-lang.org/users