0
저는 SWIG를 사용하여 C++ 라이브러리를 Java와 Python으로 포장했습니다. 자바 쪽은 잘 작동하지만, IO 예외가 발생했을 때이 특히 파이썬에 코드를 포장하는 문제를, 데, 나는 파이썬에서 다음을 얻을 : 여기 swig wrapping으로 메모리 누수가 발생했습니다 :: ios_base :: python으로 인한 실패
...
RuntimeError: _408aad4bde7f0000_p_std__ios_base__failure
swig/python detected a memory leak of type 'std::ios_base::failure *', no destructor found.
내에서 관련 장소입니다. 파일 :
%include "exception.i"
#include <stdexcept>
#include <ios>
#include <iostream>
%exception {
try {
$action
} catch (const std::exception &e) {
PyErr_SetString(PyExc_Exception, const_cast<char*>(e.what()));
}
catch(std::ios_base::failure &e) {
PyErr_SetString(PyExc_IOError, const_cast<char*>(e.what()));
}
}
아이디어가 있으십니까? 가치가있는 경우, io 예외는 라이브러리를 사용하는 원시 C++과 SWIG 랩 Java에서 예상대로 작동합니다.
예제 인터페이스에 뭔가 빠져 있다고 생각합니다. 거기에 '% exception' 지시어를 사용하는 함수가 없습니다. 예제를 가능한 가장 작은 인터페이스 파일로 줄이고 경고를 생성하는 데 필요한 Python 코드로 줄일 수 있습니까? – Flexo
그래, 나는 그들을 자르면 모든 것이 다소 길다. 나는 처음부터 간단한 테스트를 작성했다. C++ 코드가 std :: ios_base :: failure를 던지면 제대로 작동하는 것 같다. 그래서 나는 분명히 어딘가에 뭔가 잘못했다. –