뭔가를 놓치고 있어야합니다. 나는 FFI에 대해 읽었으며 이에 대한 분명한 대답을 얻지 못하는 것 같습니다.FFI/MemoryPointer 메모리 할당
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
내 질문은 이것이다 : 다음 FFI에서이를 사용하는 경우
내가 무엇을 말할 수에서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();
}
}
, 모두 당신이해야 할 것입니다 : 이제 나는 다음과 같은 C++ 기능이 있다고 가정 해 봅시다 : 누가 그 기억을 깨끗하게합니까? C++ 방법은 숯불을 꾸미고 결코 풀어주지 않고 new
'입니다. FFI가 이것을 처리합니까? 내가 여기서 무엇을 놓치고 있니? 사전에
감사합니다.
네, 그게 정확히 제가 한 일입니다. 명확한 코드 설명 주셔서 감사합니다! – Levi