Ich verstehe nicht, warum Werte von func1 zu func2 und dann main verloren gehen. Es druckt ok in func1, aber fehlgeschlagen in func2 und main. Ich glaube nicht, dass es ein SWIG-Problem ist, mehr fühlt sich an wie ein C++ - Code-Problem ~ Sie können das Problem mit unten Code reproduzieren.verlorener Wert in Array-Zeiger unter den Funktionen (kompiliert mit swig in python3)
mein 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++;
}
}
mein 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);
};
mein 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"
, wenn ich in python3 testen:
>>> 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
vielen dank! Also, wo der Zeiger float * Punkte nur in lokalen bleibt, bewegt sich nicht außerhalb des Bereichs? – ayy
Weil Sie den Zeiger nach Wert übergeben. In jedem Fall erstreckt sich die Lebensdauer der Daten in fv nur bis zum Ende von func1. Wenn Sie den Zeiger als Referenz übergeben haben und ihn so geändert haben, dass er auf die Daten von fv zeigt. Es würde ein schwebender Zeiger werden, der illegal ist. – Frank