2
値が関数func2にはfunc1から失われた後、メインますなぜ私は理解していません。それはfunc1でokを表示しますが、func2とmainでは失敗します。 私はそれがSWIG問題だとは思わない、C++コードの問題のような、より感触は〜あなたはコードの下で問題を再現することができます。失わ値
私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);
};
私test.i:
%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 *ポイントはローカルに留まり、スコープの外側には移動しません。 – ayy
ポインタを値渡しするためです。いずれにしても、fvのデータの存続期間はfunc1の終わりまでしか延びません。参照によってポインタを渡し、fvのデータを指すようにポインタを変更した場合。それは不法なぶら下がりポインタになるでしょう。 – Frank