IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Doubles pointeurs et pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 80
    Par défaut Doubles pointeurs et pointeurs
    Bonjour a tous je commence a tourner en rond concernant l'élaboration d'une fonction de lecture d'un fichier.csv dont voici le prototype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void lectureDonnees(const char *nom, float** x, float** y, int* n)
    Le fichier est composé de la sorte :
    n
    x1;y1
    x2;y2
    x3;y3
    x4;y4
    etc ...
    nom est le nom du fichier
    x contiendra les xn
    y contiendra les yn
    et n
    "n" étant le nombre de valeur x et y ici n=4 .
    Voila ou j'en suis avec sans arret des erreurs qui font planté l’exécution merci pour vos lumières, indications ou quelques contributions que ce soit .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    void lectureData(const char *nom, float** x, float** y, int* n)
    {
    	FILE* fichier;
    	int n1 = n;
    	n = malloc(1 * sizeof(*y));
    	if (n == NULL)
    	{
    		free(n); printf("Probleme pointeur");
    	}
     
    	y = malloc(1*sizeof(*y));
    	if (y == NULL)
    	{
    		free(y); printf("Probleme pointeur");
    	}
    	for (int i = 0; i < &n; i++)
    	{
    		y[i] = malloc(n1*sizeof(**y));
    		if(y[i]==NULL)
    		{
    			free(y[i]); printf("Probleme pointeur");
    		}
    	}
     
    	x = malloc(1*sizeof(*x));
    	if (x == NULL)
    	{
    		free(x); printf("Probleme pointeur");
    	}
    	for (int i = 0; i < &n; i++)
    	{
    		x[i] = malloc(n1*sizeof(**x));
    		free(x[i]); printf("Probleme pointeur");
    	}
    	fichier = fopen(nom, "r");
    	if (fichier == NULL)
    	{
    		printf("Probleme ouverture fichier");
    	}
    	else
    	{
    		fscanf(fichier, "%d", &x);
    		printf("Taille fichier : %.2f \n", n);
    	}
    	printf("%d \n", n1);
     
     
    	for (int i = 0; i < n1; i++) {
     
    		free(x[i]);
     
    	}
    	free(x);
    for (int i = 0; i < n1; i++) {
     
    		free(y[i]);
     
    	}
    	free(y);
    }

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 784
    Par défaut
    Pourquoi tu crées des tableaux (x et y) d'1 seule case ?

    En voyant vite fait ton code () j'ai l'impression que tu n'as pas capté que les doubles pointeurs sont là pour créer les tableaux dans une fonction et non pas pour faire une matrice (tableau à 2 dimensions, tableau de tableaux)

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 80
    Par défaut
    Ton impression est parfaitement bonne ...
    Mais dis moi un pointeur a une dimension est apparenté a un tableau non ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 784
    Par défaut
    Non justement , un pointeur peut être l'adresse d'un pointeur pour que justement tu puisses créer ce-dit pointeur.
    Parce que le passage de paramètres en C est par valeur

  5. #5
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Il est difficile de t'orienter précisément. La spécification de ta fonction est incomplète et il est impossible de l'inférer de l'implémentation que tu proposes. À quoi ressemble un appel de cette fonction ? Peux-tu donner un exemple de cas d'utilisation ? Quels sont les contraintes sur les paramètres ? Que fournit-on en entrée, qu'obtient-on en sortie ?

    Tu peux t'inspirer d'une page de manuel de catégorie 3 ou de ce type de document de spécification pour lever toute ambiguïté.

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 784
    Par défaut
    Bof pas d'accord avec Matt_Houston

    Si la signature est la suivante: void lectureDonnees(const char *nom, float** x, float** y, int* n), cela semble presque évident que
    • nom, c'est le chemin du fichier. Donc juste tester si le nom n'est pas NULL ni vide (mieux qui contient un point au 4ième caractère en partant de la droite).
    • n, est une variable qu'on doit garnir avec la valeur lue. Donc juste un test non NULL et pas besoin de malloc.
    • x et y sont les tableaux à créer et à remplir. Donc il faut qu'ils ne soient pas NULL et que leur contenu *(x) et *(y) soit NULL. Ensuite on les crée simplement *(x) = malloc(n * sizeof(float)) et on y accède avec un truc comme cela (*(x))[i] ou (*(x) + i).

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 80
    Par défaut
    Citation Envoyé par Matt_Houston Voir le message
    Il est difficile de t'orienter précisément. La spécification de ta fonction est incomplète et il est impossible de l'inférer de l'implémentation que tu proposes. À quoi ressemble un appel de cette fonction ? Peux-tu donner un exemple de cas d'utilisation ? Quels sont les contraintes sur les paramètres ? Que fournit-on en entrée, qu'obtient-on en sortie ?

    Tu peux t'inspirer d'une page de manuel de catégorie 3 ou de ce type de document de spécification pour lever toute ambiguïté.
    Alors en entrée on a un fichier.csv et en sortie on enregistre les valeurs du fichier dans les "tableaux pointeurs "

Discussions similaires

  1. Pointeurs et pointeurs de pointeurs
    Par wallace27 dans le forum C
    Réponses: 10
    Dernier message: 09/04/2015, 22h07
  2. Réponses: 21
    Dernier message: 06/08/2009, 09h31
  3. conversion double en entier pointeur
    Par steph496 dans le forum Débuter
    Réponses: 4
    Dernier message: 28/05/2009, 21h45
  4. Réponses: 6
    Dernier message: 26/05/2007, 00h33
  5. pointeur sur pointeur
    Par gaut dans le forum C
    Réponses: 3
    Dernier message: 01/11/2005, 21h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo