Allouer un espace mémoire toujours à la même variable
Bonjour,
Je programme un JNI en C++ et ma fonction native me génère des bugs mémoire (si j'appelle "trop" ma fonction native) et mon programme me donne de "mauvais" résultats.
Voici un bout de mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
JNIEXPORT jfloat JNICALL Java_appli_InterfacePI_piar_1value
(JNIEnv *env, jobject obj, jint numpt, jint date)
{
/* On crée une variable de stockage pour la dll */
HINSTANCE PIAPI32;
/* On charge la dll */
PIAPI32 = LoadLibrary("piapi32.dll");
if (PIAPI32 != NULL)
{
char *type = new char;
long int *iStat = new long int;
float *rval = new float;
long int *mode = new long int;
/* On a besoin du type du point pour connaitre la valeur à retourner */
typedef long int (*_pipt_pointtype)(long int,char&);
_pipt_pointtype pipt_pointtype;
pipt_pointtype = (_pipt_pointtype)GetProcAddress(PIAPI32, "pipt_pointtype");
pipt_pointtype(numpt,*type);
typedef long int (*_piar_value)(long int,long int&,long int,float&,long int&);
_piar_value piar_value;
#define ARCVALUEBEFORE 1
*mode=ARCVALUEBEFORE;
/* On interface la fonction C++ avec la fonction de la dll */
piar_value = (_piar_value)GetProcAddress(PIAPI32, "piar_value");
/* On applique la fonction */
piar_value(numpt,date,*mode,*rval,*iStat);
/* On libère la dll */
FreeLibrary(PIAPI32);
/* On retourne la valeur courante du point suivant son type */
delete mode;
if (*type=='R')
{
return *rval;
}
else if (*type=='D')
{
/* On convertit l'entier en float */
return static_cast<float>(*iStat);
}
}
} |
J'ai deux questions :
1) Comment puis-je libérer la mémoire de mes variables en gras sachat que j'en ai besoin pour l'instruction return ? (Au passage ai-je bien utilisé l'instruction delete ?)
2) Sinon comment toujours allouer le même espace mémoire pour ces variables ?
Merci beaucoup, je suis complètement bloquée :/