A voir également:
- Prog qui plante a la fin a cause du free (C)
- Word 2013 free download - Télécharger - Traitement de texte
- Sketchup free - Télécharger - 3D
- Free ocr - Télécharger - Divers Bureautique
- Piratage free - Accueil - Piratage
- Zimbra free - Guide
4 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
21 nov. 2009 à 23:25
21 nov. 2009 à 23:25
Salut,
x = (float *) malloc(n*sizeof(int));
Attention x est un pointeur sur un float. Il faut donc allouer n*sizeof(float) ou n*sizeof *x
for (i=1;i<=n;i++)
Un tableau commence à l'indice 0 et se termine à n-1. Donc la boucle sera : for(i=0;i<n;i++);
Sinon tu écriras sur une case non allouée dans le heap ou pire encore, cela pourra changer une valeur dans une autre zone allouée contigument.
Si cela ne marche toujours pas, poste ton code global (avec les déclaration de toutes tes variables, les en-têtes, ...).
Sinon quelques conseils :
Evite les variables globales et vérifie la valeur de retour du malloc.
Cdlt
x = (float *) malloc(n*sizeof(int));
Attention x est un pointeur sur un float. Il faut donc allouer n*sizeof(float) ou n*sizeof *x
for (i=1;i<=n;i++)
Un tableau commence à l'indice 0 et se termine à n-1. Donc la boucle sera : for(i=0;i<n;i++);
Sinon tu écriras sur une case non allouée dans le heap ou pire encore, cela pourra changer une valeur dans une autre zone allouée contigument.
Si cela ne marche toujours pas, poste ton code global (avec les déclaration de toutes tes variables, les en-têtes, ...).
Sinon quelques conseils :
Evite les variables globales et vérifie la valeur de retour du malloc.
Cdlt
Zestyr
Messages postés
466
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
17 octobre 2011
52
21 nov. 2009 à 19:56
21 nov. 2009 à 19:56
Pour qu'on t'aide faut montrer tout le code concerné,
tu fais de la place pour un tableau int alors que ton tableau est aprament un float
et si c'est un int il ya des erreurs dans la suite du code
tu fais de la place pour un tableau int alors que ton tableau est aprament un float
et si c'est un int il ya des erreurs dans la suite du code
voici la déclaration:
et le code qui peut vous intéresser:
et par exemple la fonction D_calc:
merci :)
float *x=NULL; // We initialize the pointer x float *y=NULL; // We initialize the pointer y
et le code qui peut vous intéresser:
int main () { // Main function int i = 0; printf ("Please enter N :") ; // We ask the user to enter the number of x-y pairs he wants to give scanf ("%d", &n) ; x = (float *) malloc(n*sizeof(int)); // We allocate a area in the memory for x y = (float *) malloc(n*sizeof(int)); // We allocate a area in the memory for y for (i=1;i<=n;i++) // Loop of the number of pairs N { printf ("Please choose the value of x[%d] :\n", i) ; // We ask the user for the value of x for each pair scanf ("%f", &x[i]) ; printf ("Please choose the value of y[%d] :\n",i) ; // We ask the user for the value of y for each pair scanf ("%f", &y[i]) ; } D = D_calc(n,x); // We call the function which calculates D A = A_calc(n,x,y); // We call the function which calculates a B = B_calc(n,x,y); // We call the function which calculates b L= - (B/A); // We calculate L
et par exemple la fonction D_calc:
float D_calc (int n, float *x){ // Function which calculate the value of D int i; float D1=0, D2=0, D; for (i=1 ; i<=n ; i++){ D1 = D1 + x[i] * x[i]; // D1 is the first sum of D-equation D2 = D2 + x[i]; // D2 is the second sum of D-equation } D1 = D1 * n; // We multiply the first sum of D-equation by n D2 = D2 * D2; // We put at the power 2 the second part of D-equation D = D1 - D2; // We finally calculate D return (D); }
merci :)
Zestyr
Messages postés
466
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
17 octobre 2011
52
21 nov. 2009 à 20:26
21 nov. 2009 à 20:26
Quand tu fais
scanf ("%f", &x[i]) ;tu écrase le pointeur sur l'adresse et quqnd tu fais apelle à free argumenté par x ça fais planter, donc fais
scanf ("%f", x[i]) ;et
printf ("%f", *x[i]) ;pour utiliser ton tableu
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
21 nov. 2009 à 23:18
21 nov. 2009 à 23:18
tu écrase le pointeur sur l'adresse et quqnd tu fais apelle à free argumenté par x ça fais
Non. &x[i] est correct puisqu'il s'agit de l'adresse de la i+1ème case du tableau. On peut écrire à la place x+i tout simplement.
Donc il faut mettre scanf("%f",&x[i]); et printf("%f",x[i]);
Non. &x[i] est correct puisqu'il s'agit de l'adresse de la i+1ème case du tableau. On peut écrire à la place x+i tout simplement.
Donc il faut mettre scanf("%f",&x[i]); et printf("%f",x[i]);
Zestyr
Messages postés
466
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
17 octobre 2011
52
21 nov. 2009 à 20:37
21 nov. 2009 à 20:37
A oui aussi,
même si sur ton ordi les float et les int font la même taille change ça:
Car sinon ça veux plus rien dire, autan) demander 2Mo(float *500*1000) xD ou même ne pas faire d'allocation dynamique !
même si sur ton ordi les float et les int font la même taille change ça:
x = (float *) malloc(n*sizeof(int)); y = (float *) malloc(n*sizeof(int));en ça
x = (float *) malloc(n*sizeof(float)); y = (float *) malloc(n*sizeof(float));
Car sinon ça veux plus rien dire, autan) demander 2Mo(float *500*1000) xD ou même ne pas faire d'allocation dynamique !
22 nov. 2009 à 18:57
bonne journée ! ;)