<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial">I am working on cl-gobject-introspection (https://github.com/andy128k/cl-gobject-introspection), a common lisp gobject introspection binding.  I am trying to use extended foreign type system of CFFI to implement foreign memory operations.  I have some questions about that.<br><br>I need to manipulate foreign array.  I tried to define an extended foreign array type because there is some features that is lacking in foreign-array-type.  I can access/assign element of foreign array with cffi:mem-ref and setf.  But I don't know how to free element of foreign array (the element type can be aggregated).<br><br>Then I checked foreign-array-type implementation of CFFI, and found there appears no way to free translated element of array too.  For example:<br><br>(defvar *string-array* (cffi:convert-to-foreign #("a" "b" "c") '(:array :string 3)))<br>(cffi:free-foreign-object *string-array* '(:array :string 3) t)<br><br>The foreign memory corresponding to string "a", "b" and "c" is not freed if my understanding were correct.<br><br>I think if there is something like cffi:mem-free like cffi:mem-ref, may be this can be resolved.  It can be something like.<br><br>(defun mem-free (ptr type param &optional (offset 0))<br>  (let* ((parsed-type (parse-type type))<br>         (ctype (canonicalize parsed-type)))<br>    (if (aggregatep parsed-type)<br>        (free-translated-object (inc-pointer ptr offset) parsed-type param)<br>        (free-translated-object (%mem-ref ptr ctype offset) parsed-type param))))<br><br>I think you guys may have better idea about how to resolve the question.<br><br>Best Regards,<br>Huang, Ying<br><br><div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"></div></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>