yopman21
Messages postés4Date d'inscriptionmardi 6 octobre 2009StatutMembreDernière intervention25 juillet 2013
-
24 juil. 2013 à 17:01
Utilisateur anonyme -
25 juil. 2013 à 10:58
Bonjour tout le monde.
Je travaille sur un web service à généré par Gsoap.
J'expose mon problème.
J'ai un tableau de float à envoyer.
J'utilise l'exemple de Gsoap du One-Dimensional Dynamic SOAP Arrays qui utilise un pointeur et la taille du tableau.
struct some_name
{
Type *__ptr; // pointer to array of elements in memory
int __size; // number of elements pointed to
[[static const] int __offset [= ...];] // optional SOAP 1.1 array offset
... // anything that follows here will be ignored
};
Dans mon cas :
int ns__gpioAnalogRead(int Channel, int nSample, struct Data_Read{float* __ptr; int __size;} &DR);
En effet, lorsque l'on fait "+ 1" sur un pointeur, c'est toujours traduit en "+ 1 unité" ou "avancer d'une case".
En d'autre terme: "ptr + 1" équivaut déjà à "ptr + 1 * sizeof (*ptr)".
Ton écriture provoquait un: "ptr + sizeof (*ptr) * sizeof (*ptr)".
Tu as surement le même souci sur la ligne: "DR.__ptr=DR.__ptr-(sizeof(float)*nSample);".
J'écrirais à ta place, ceci (non testé):
int ns__gpioAnalogRead(struct soap* soapPRM, int Channel, int nSample, struct Data_Read &DR)
{
DR.__ptr = (float*) malloc(nSample * sizeof(float));
DR.__size = nSample;
for(int i = 0; i < nSample; ++i, ++DR.__ptr)
*DR.__ptr = 5.0000;
return SOAP_OK;
}
J'ai du mal à comprendre pourquoi tu écris dans "__ptr", si tu libères la mémoire derrière. Mais plutôt que de faire des calculs, il te suffit simplement de "retenir la tête". Ça donnerait ça:
int ns__gpioAnalogRead(struct soap* soapPRM, int Channel, int nSample, struct Data_Read &DR)
{
DR.__ptr = (float*) malloc(nSample * sizeof(float));
DR.__size = nSample;
float* head = DR.__ptr;
for(int i = 0; i < nSample; ++i, ++DR.__ptr)
*DR.__ptr = 5.0000;
free(head);
return SOAP_OK;
}
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 24 juil. 2013 à 21:46
Salut,
tu alloues un tableau de float sur le heap, tu y affectes des valeurs puis tu libères le pointeur.
A partir de là, les données contenues dans cet espace mémoire sont aléatoires.