Mauvaise allocation (bad_alloc)
Bonjour,
J'ai un problème de mémoire dans mon programme. VS me renvoie une exception bad_alloc sur la fonction get_Traj() suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| double * Processus_Ito::get_Traj(double h) const {
//on simule une trajectoire du processus
//on renvoie un tableau contenant les points (S_{t_i})
long N = (long) floor(T/h)+1;
double * traj = new double[N];
*SCurr=S0;
traj[0]=S0;
double t=0;
for(int i=0;i<N-1;i++)
{
traj[i+1]=traj[i]+(*this).get_Increment(t,h);
*SCurr=traj[i+1];
t+=DT;
}
return traj;
} |
Je l'utilise à travers d'autres fonctions :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| double BarrierOption::Simule() const
{
cout << "Récupération de la trajectoire"<<endl;
double * traj= S.get_Traj(S.getDT());
//on regarde si l'actif est sortie du domaine durant la
//durée de vie de l'option
int i=0;
while ((traj[i]>=bg) && (traj[i]<=bd) && (i<S.getN()))
i++;
if(i==S.getN())
return P(traj[S.getN()-1]);
else
return 0;
} |
et
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| double* Processus::MonteCarlo(long NMC) const{
double M=0,V=0;
for(int i=0;i<NMC;i++)
{
double real = (*this).Simule();
M+=real;
V+=real*real;
}
M*=1./NMC;
double var=1./(NMC-1)*V-NMC*M*M/(NMC-1);
double rvar=sqrt(var);
double *ret = new double[4];
ret[0]=M-rvar*1.96/sqrt((double)NMC);
ret[1]=M;
ret[2]=M+rvar*1.96/sqrt((double)NMC);
ret[3]=var;
return ret;
} |
Quand je prend pour h (paramètre de get_Traj) la valeur 0.01 et pour NMC la valeur 10^7, mon programme calcule la valeur que j'attends. Par contre si je prends h=0.0001 et NMC=100000. L'exception est levée pour i=26669...
Par ailleurs, si j'appelle get_Traj tout seul et que je copie le tableau renvoyé dans un fichier, tout se passe bien même pour h=0.0001.
Auriez-vous une idée de l'origine du problème ? J'ai bien fait attention de détruire tous mes pointeurs dès que je le pouvais et pourquoi ça ne plante pas tous le temps ?
Pour information, la classe Processus_Ito dérive la classe Processus et la classe BarrierOption a un membre S qui est un processus.
Merci d'avance de votre aide.
allced.