L'allocation mémoire ne marche pas bien
Résolu/Fermé
geekat
Messages postés
228
Date d'inscription
vendredi 31 juillet 2015
Statut
Membre
Dernière intervention
24 février 2017
-
Modifié par geekat le 20/01/2016 à 21:47
geekat Messages postés 228 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 24 février 2017 - 23 janv. 2016 à 15:55
geekat Messages postés 228 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 24 février 2017 - 23 janv. 2016 à 15:55
A voir également:
- L'allocation mémoire ne marche pas bien
- Mémoire vive - Guide
- Mémoire vidéo dédiée : 128 mo ✓ - Forum Carte graphique
- Mon ordinateur ne va pas bien - Guide
- Test memoire pc - Guide
- Vider memoire iphone - Guide
1 réponse
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
20 janv. 2016 à 23:22
20 janv. 2016 à 23:22
Bonjour,
Sans connaître la structure du fichier, c'est difficile de t'aider.
Néanmoins, quelques pistes :
int main()
Le bon prototype est int main(void)
double** vect;
L'allocation n'est pas complète. Tu as alloué le nombre de lignes, mais pas le nombre de colonnes. Il faut faire une boucle for pour allouer de 4 cases chacune des lignes allouées.
exit(EXIT_FAILURE);
Utilise plutôt return EXIT_FAILURE;
for (i=0;i<=149;i++){
Tu fais une allocation de 100 lignes et là, tu itères sur 150 lignes...
fscanf(fichier, "%lf ,%lf ,%lf ,%lf", ...)
Tu as fait un fgets() dans ton while et là, tu refais un fscanf()... Autrement dit, tu lis une ligne pour rien... Utilise plutôt sscanf(chaine, "%lf..."...) pour parser la chaîne sauvegardée plutôt que de lire une ligne de plus dans le fichier.
Attention à l'indentation qui est hasardeuse. Ce n'est pas pratique pour nous de lire...
Cdlt,
Sans connaître la structure du fichier, c'est difficile de t'aider.
Néanmoins, quelques pistes :
int main()
Le bon prototype est int main(void)
double** vect;
L'allocation n'est pas complète. Tu as alloué le nombre de lignes, mais pas le nombre de colonnes. Il faut faire une boucle for pour allouer de 4 cases chacune des lignes allouées.
exit(EXIT_FAILURE);
Utilise plutôt return EXIT_FAILURE;
for (i=0;i<=149;i++){
Tu fais une allocation de 100 lignes et là, tu itères sur 150 lignes...
fscanf(fichier, "%lf ,%lf ,%lf ,%lf", ...)
Tu as fait un fgets() dans ton while et là, tu refais un fscanf()... Autrement dit, tu lis une ligne pour rien... Utilise plutôt sscanf(chaine, "%lf..."...) pour parser la chaîne sauvegardée plutôt que de lire une ligne de plus dans le fichier.
Attention à l'indentation qui est hasardeuse. Ce n'est pas pratique pour nous de lire...
Cdlt,
21 janv. 2016 à 00:34
J'ai corrigé int main(void), et j'ai remplacé le fscanf par sscanf
Par contre, je ce comprends pas cette partie :
Mon fichier est sous cette forme :
Il contient 150 lignes et 5 colonnes dont 4 doubles
Comment allouer des lignes et des colonnes ?
Merci
Modifié par fiddy le 21/01/2016 à 22:34
Tu veux faire un tableau 150 lignes et 4 colonnes.
Premièrement, on alloue les lignes :
Note : tu remarqueras que c'est sizeof(*vect) et non sizeof(**vect). Tu alloues une zone de 150 pointeurs.
Ensuite, on alloue les colonnes :
Note : chacun de ses pointeurs pointeront vers une zone de 4 double...
Je te laisse faire la vérification du code retour des malloc().
Avant la fin de ton programmes, il faudra libérer les zones allouées via des free()... Pareil, boucle for pour faire un free des lignes. Puis un free globale.
Je te conseille vraiment de lire un tuto, car c'est la base.
22 janv. 2016 à 18:49
Modifié par geekat le 22/01/2016 à 18:57
J'ai une autre question : comment est-ce que je peux faire des opérations sur les valeurs allouées soient par exemple :
le 1er vecteur : 5.1,3.5,1.4,0.2
Je veux faire un carré de toutes ces valeurs soit :
Carré (5.1*5.1)
Carré (3.5*3.5) .....
Je fais ceci mais ça ne marche pas bien :
J'ai repris le code avec l'allocation mémoire qui marche bien.
La partie <-------------------------CARRE----------------------------> ne marche pas bien.
23 janv. 2016 à 00:12
Pourquoi utiliser math.h ? Inutile ici.
Pourquoi déclarer la variable j ? Inutile ici.
Pourquoi dis-tu que ça ne marche pas ? Qu'est-ce qui ne fonctionne pas ? Ta syntaxe est correcte.