Hi! Yeah. I also found that. When I'm about to answer my own question, I saw your reply. It worked great. Thanks!
- Rujia On Wed, Sep 25, 2013 at 9:02 PM, Stephan Frank <defcl...@googlemail.com>wrote: > I'm not sure if this is the real problem but aren't you mixing C++ > allocation via new with C-deallocation via free and should instead also use > the C++ delete operator to free the memory, i.e. define a function such as > > void deleteForMe(int* pointer) > { > delete[] pointer; > } > > and call that instead of a simple free? > > Regs, > > Stephan > > > > > 2013/9/25 Rujia Liu <rujia....@gmail.com> > >> Dear all, >> >> I have trouble using foreign-free on win7 64bit. >> >> My code: >> >> C++: >> >> int* gen(int n) { >> int* x = new int[n]; >> for(int i = 0; i < n; i++) x[i] = i; >> return x; >> } >> >> LISP: >> >> (defun gen-values (n) >> (let* ((ret (cffi:foreign-funcall "gen" :int n :pointer))) >> (dotimes (i n) >> (format t "~A~%" (mem-ref (mem-aptr ret :int i) :int))) >> (foreign-free ret))) >> >> It works well on windows XP (32bit), but crashes on (foreign-free ret). >> SBCL win32 just crashes the process, while CCL win32 dropped me into kernel >> debugger. The topmost frame is a call to FREE. >> >> Our customers use both 32-bit and 64-bit systems, so I'd like to provide >> a single exe that runs on both 32-bit and 64-bits. Our dev machine is >> running a 32-bit Windows XP, uses VS2008 to compile to C++ library to DLL. >> >> After I commented out (foreign-free), the exe runs perfectly on both >> 32-bit and 64-bit, but there are memory leaks. Am I doing anything wrong? >> >> Thanks in advance. >> >> - Rujia >> >> >