Use of uninitialised value of size 8
Résolu
rosate999
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
A voir également:
- Valgrind use of uninitialised value of size 8
- Clé windows 8 - Guide
- Mixcraft 8 - Télécharger - Création musicale
- 552 size limit exceeded ✓ - Forum Mail
- Out of range écran - Forum Ecran
- Out of range - Forum Ecran
3 réponses
Salut, soit dit en passant: utilise la balise
Pour commencer, la première erreur que je vois est que tu cherches à accéder à un élément de
Sachant que ta boucle traite maxi 6 lignes, il faut allouer 6 pointeurs de points:
Deuxièmement, ta manière d'accéder aux éléments de ta struct dans le tableau est on ne peut plus étrange, surtout que plus bas tu y accèdes correctement:
Le dernier hic est que je ne vois pas à quoi sert ton
<code>pour mettre du code dans tes messages, ça garde l'indentation et t'as des couleurs en plus.
Pour commencer, la première erreur que je vois est que tu cherches à accéder à un élément de
asans avoir alloué de mémoire, donc
aest un pointeur vide, donc c'est le crash assuré.
Sachant que ta boucle traite maxi 6 lignes, il faut allouer 6 pointeurs de points:
... matriceDistance = fopen("fichier.txt", "r"); a = calloc(sizeof(point *), 6); ...Maintenant a pourra recevoir 6 pointeurs de structure
point.
Deuxièmement, ta manière d'accéder aux éléments de ta struct dans le tableau est on ne peut plus étrange, surtout que plus bas tu y accèdes correctement:
((*a)[i]).i=i1; // WTF o_O? /* Devient */ a[i]->i=i1; // Là c'est propreMais une fois de plus tu accèdes à un pointeur
NULL, il faut allouer de la mémoire pour ton point:
... fscanf(matriceDistance,"%d %d %lf", &i1,&i2, &val); a[i] = malloc(sizeof(point)); ...
Le dernier hic est que je ne vois pas à quoi sert ton
tableau_t *tableau;vu que tu ne t'en sers pas, et que tu fais ça
a=tableau->a;et que c'est pas cool: tu vas perdre ton tableau de points, sans libérer la mémoire en plus... J'ai donc mis les 2 lignes citées en commentaire, et ça marche.
fiddy
Messages postés
11069
Date d'inscription
Statut
Contributeur
Dernière intervention
1 846
L'allocation de "a" n'est pas correcte par rapport à son code. C'est le contraire ;-).
Bonjour,
En plus des remarques de gravgun,
point **a;
a est un double pointeur. Vu comment tu l'utilises, tu dois faire :
Ou alors déclarer "a" en point *a;
Et n'oublie pas les free() qui vont bien.
printf("%d %d %lf \n", i1, i2, ((*a)[i]).c);
printf("%lf", calcul);
Plutôt %f (et non %lf).
Et enfin, n'oublie pas de mettre un '\n' dans le dernier printf() pour forcer l'affichage, ou alors fflush(stdout); avant le return 0; du main.
Google is your friend
En plus des remarques de gravgun,
point **a;
a est un double pointeur. Vu comment tu l'utilises, tu dois faire :
a=malloc(sizeof(point *)); *a=malloc(6*sizeof(point));
Ou alors déclarer "a" en point *a;
Et n'oublie pas les free() qui vont bien.
printf("%d %d %lf \n", i1, i2, ((*a)[i]).c);
printf("%lf", calcul);
Plutôt %f (et non %lf).
Et enfin, n'oublie pas de mettre un '\n' dans le dernier printf() pour forcer l'affichage, ou alors fflush(stdout); avant le return 0; du main.
Google is your friend
'lut fiddy, en fait mon approche est différente de la tienne: tu fais de
Pour le reste, bien vu ;)
aun pointeur vers un autre unique pointeur d'une zone mémoire contigüe de 6
points, moi c'était un pointeur vers un tableau de différents pointeurs de
point(répartition non contigüe donc), ce qui fait que j'ai changé sa manière d'accéder au tableau; mais c'est vrai qu'après observation,
((*a)[i]).imarche avec ton code.
Pour le reste, bien vu ;)