Allocation dynamique

CeNedra83 Messages postés 96 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 11 juillet 2006 - 28 mars 2006 à 10:26
patriarch24 Messages postés 25 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 28 mars 2006 - 28 mars 2006 à 15:53
je code en C++ en je ne comprend pas un truc:
ma fonction marchait très bien et maintenant elle se met à planter une fois sur 2 pour cause d'allocation de pointeurs je pense.
j'ai alors tout enlevé et déclaré mes pointeurs autrement et j'obtiens ceci:

void polyReg(double *x, double *y, int sizexy, double *a, int order_poly)
{
//realize polynomial interpolation.

//x : array of all points x coordinates.
//y : array of all points y coordinates.
//sizexy : size of x and y arrays.
//a : polynomial coeff returned.
//order_poly : order of polynom wanted.

//-----"Moindres Carrés" Method-----

int ord = order_poly + 1;
int n = sizexy;

double** A = new double*[ord];
for (int i=0 ; i<ord ; i++)
A[i] = new double[ord];

////à voir la dimension de S
double *S = new double[2*order_poly +1];
double *W = new double[ord];
double *sol = new double[ord];

delete []S;
delete []W;
delete []sol;

for(int i=0; i<ord; i++)
{
delete[]A[i];
}
delete []A;

}//end polyReg

avant j'avais ceci:

//double *A = new double[ord * ord] ;

//double** A = (double **)calloc( ord , sizeof(double *));
//for(int i=0; i<ord; i++) A[i] = (double *)calloc( ord , sizeof(double));

////à voir la dimension de S
//double *S = (double *)malloc( (2*order_poly +1 ) * sizeof(double));
//double *W = (double *)calloc(ord, sizeof(double));
//double *sol = (double *)calloc(ord, sizeof(double));



//tableaux x et y OK
/*
//-----computing the Sk-----
for(int k=0; k<= (2*order_poly) ; k++)
{
S[k]=0;
for(int i=1; i< n+1; i++)
{
S[k] = S[k] + pow(x[i-1],k);
}//for i
}//for k

//-----computing the Wk-----
for(int k=0; k< order_poly+1; k++)
{
W[k]=0;
for(int i=1; i<n+1; i++)
{
W[k] = W[k] + y[i-1] * pow(x[i-1],k);
}//for i
}//for k

//---computing matrix coefficients---
for(int i =1; i<= ord ; i++)
{
for(int j =1; j<= ord ; j++)
{
if(i==1 && j==1)
A[i-1][j-1] = n;
else
A[i-1][j-1] = S[i+j]; //à voir pour le -2????
}//for j
}//for i

gauss_solv(A,ord, W,sol);

for(k=0; k<order_poly; k++)
a[k] = sol[k];
*/
/*for(i=0; i<ord; i++)
{
free(A[i]);
A[i]=NULL;
}
free(A);
A=NULL;
free(S);
S=NULL;
free(W);
W=NULL;
free(sol);
sol=NULL;*/

for(int i=0; i<ord; i++)
{
delete[]A[i];
}
delete []A;

QQn voit ce qui ne va pas? pourkoi ça ne plante jamais deux fois au meme endroit?

help please!!!

1 réponse

patriarch24 Messages postés 25 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 28 mars 2006
28 mars 2006 à 15:53
Déjà, commence par éviter d'utiliser "free" et delete en même temps : en C++, c'est new et delete.

Au vu de ton code, tu dois avoir des erreurs de segmentation... il est monstrueux ! Tu détruit un objet, et tu utilise la zone mémoire ensuite : delete []S et plus bas : S[k] -> pas étonnant qu'il y ait des problèmes. Repense complétement ton code, réfléchit bien à ce que tu fais, et ne détruit pas les objets trop vite !

Bon courage !
0