From: Bruno H. <br...@cl...> - 2005-05-30 11:53:42
|
Sam wrote: > does CLISP FFI support double arrays? > > --------- sum.c ------------------- > double sum (int len, double *vec) { > int i; > double s=0; > for (i=0; i<len; i++) s+= vec[i]; > return s; > } > --------- sum.c ------------------- > gcc -shared -o libsum.so sum.c > > (def-call-out sum (:name "sum") (:library "libsum.so") (:language :stdc) > (:return-type double-float) > (:arguments (n int) (v (c-array-max double-float 10)))) > > (sum 0 #()) ==> 0d0 > (sum 3 #(1d0 2d0 3d0)) ==> segfault (at NULL) This is normal. Your declaration (def-call-out sum ...) corresponds to double sum (int len, double v[10]); which means that 10 doubles are passed on the stack. Whereas sum.c defines a function that expects on the stack a _pointer_ to 10 doubles. So the CPU is now interpreting the first half of a 'double' value as a pointer, and it must crash. Bruno |