我必須缺少一些東西。我一直在閱讀關於FFI的內容,似乎無法得到明確的答案。比方說,我有下面的C++函數:FFI/MemoryPointer內存分配
extern "C" {
int ReturnAnArrayOfStrings(const char* arrayOfStrings[]) {
if(NULL == arrayOfStrings) return someCharList.size();
for(auto iter = someCharList.begin(), auto index = 0; iter != someCharList.end(); ++iter, ++index) {
char* allocatedHere = new char[strlen(*iter)]; // note that this is not freed
strcpy_s(allocatedHere, strlen(*iter), *iter);
arrayOfStrings[index] = allocatedHere;
}
return someCharList.size();
}
}
從我可以告訴,如果使用這種來自FFI,所有你需要做的是以下幾點:
module SomeDll
extend FFI::Library
ffi_lib 'SomeDll.dll'
attach_function :get_strings, :ReturnAnArrayOfStrings, [:pointer], :int
end
include SomeDll
pointer = FFI::MemoryPointer.new :pointer, get_strings(nil) # how many strings are there?
get_strings pointer
pointer.get_array_of_string(0).each do |value|
puts value
end
我的問題是這樣的:誰清理內存? C++方法是new
'char *,但從不釋放它。 FFI是否處理這個問題?我在這裏錯過了什麼?
在此先感謝。
是的,這正是我最終做的。感謝您的明確的代碼解釋! – Levi