2
값이 func1에서 func2로 손실 된 다음 main으로부터 왜 손실되는지 이해할 수 없습니다. 그것은 func1에서 ok를 인쇄하지만 func2와 main에서는 실패합니다. 나는 그것이 swig 문제라고 생각하지 않는다. C++ 코드와 같은 느낌이다. 아래 코드로 문제를 재현 할 수있다.함수 중 배열 포인터의 값이 손실 됨 (python3에서 사용하기 위해 swig로 컴파일 됨)
내 Test.cpp에 :
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
#include <mutex>
#include "test.h"
void test::func1(float* feat) {
std::vector<float> fv = {1,2,3,4,5,6,7};
feat = fv.data();
for (std::size_t i = 0; i < 7; ++i){
std::cout << *feat << std::endl;
feat++;
}
}
bool test::func2(float* feat) {
test::func1(feat);
}
bool test::main(float* feat){
test::func2(feat);
for (std::size_t i = 0; i < 7; ++i){
std::cout << *feat << std::endl;
feat++;
}
}
내 test.h :
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
#include <mutex>
class test {
public:
void func1(float* feat);
bool func2(float* feat);
bool main(float* feat);
};
내 테스트 테스트 :
%module test
%{
#define SWIG_FILE_WITH_INIT
#include "test.h"
%}
%include "carrays.i"
%array_functions(float, floatArray);
%include <std_string.i>
%include "test.h"
내가 python3에서 테스트 :
>>> from test import test, new_floatArray, floatArray_getitem
>>> import numpy as np
>>> pp = test()
>>> temp = new_floatArray(5)
>>> pp.main(temp)
1
2
3
4
5
6
7
0
0
0
0
0
4.02252e-14
1.4013e-44
False
정말 고마워요! 따라서 포인터 float * points가 로컬에만 머물러 있으면 스코프 외부로 이동하지 않습니까? – ayy
포인터를 값으로 전달했기 때문에. 어쨌든 fv의 데이터 수명은 func1의 끝까지 만 확장됩니다. 포인터를 참조로 전달한 다음 fv의 데이터를 가리 키도록 변경했습니다. 그것은 불법 인 매달려있는 포인터가 될 것입니다. – Frank