J'ai un comportement étrange avec le code suivant en utilisant la bibliothèque Eigen
.La valeur du pointeur de retour change après la transmission d'une méthode
Si j'attribue le pointeur à DoubleListCg->doubles
, la valeur obtenue pour le DoubleListCg->doubles[i]
est erronée. Mais si j'attribue l'élément un par un, alors la valeur obtenue pour le tableau de pointeurs ci-dessus est correcte. Pourquoi?
Ceci est mon code ci-dessous:
#define DllExport __declspec(dllexport)
#include "stdafx.h"
#define EIGEN_USE_MKL_ALL
#include <iostream>
#include "Eigen/Dense"
#include "Eigen/src/Core/util/MKL_support.h"
#include <Eigen/Sparse>
#include <Eigen/Eigenvalues>
#include <vector>
#include <Eigen/PardisoSupport>
using namespace std;
using namespace Eigen;
extern "C" struct DllExport DoubleListCg
{
int num_points;
double* doubles;
};
// working
void DoubleList(VectorXd vector, DoubleListCg *dListPtr)
{
dListPtr->num_points = vector.size();
dListPtr->doubles= (double*) malloc (dListPtr->num_points*sizeof(double));
for (int i = 0; i < vector.size(); i++)
{
dListPtr->doubles[i]=vector[i];
}
}
//not working
void DoubleList2(VectorXd vector, DoubleListCg *dList)
{
dList->num_points = vector.size();
dList->doubles =vector.data();
}
void VectorConvert()
{
VectorXd vector(3);
vector<<1,2,3;
DoubleListCg dList;
DoubleList(vector, &dList); //this works; the dList gets the right values at first element
DoubleListCg dList2;
DoubleList2(vector, &dList2) //this doesn't work; the dList2 gets the wrong values at first element
}
Il doit être quelque chose de vraiment élémentaire que je raccroche.
question connexe: Y at-il de toute façon que je peux pointer dList->doubles
au vector.data()
? Je ne veux pas tout copier encore et encore
Pourquoi cette question a été downvoted et voté pour la fermeture (pour la raison de ne pas reproductible)? – Graviton