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 :

Problème passage de paramètres


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    Décembre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Décembre 2008
    Messages : 53
    Points : 44
    Points
    44
    Par défaut Problème passage de paramètres
    Bonjour,

    j'ai un problème sur le passage de tableau de 1 ou 2 dimensions en paramètres. Les tableaux sont au format "double" et j'utilise des pointeurs. Si j'ai bien compris le problème, l'adresse donnée dans l'appel de la fonction n'arrive pas à être réutilisée par la suite (violation d'accès à la mémoire lorsque j'essaye de récupérer les valeurs contenues dans le tableau). Je travaille sous C++ Builder 2007 et Visual Studio 2008 pour déboguer le programme (Visual Studio donne plus d'infos sur les erreurs).
    Ci-joint une image concernant le problème et le code posant problème avec le headers pour les déclarations.

    Code fonction.h : 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
     
    #ifndef fonctionsH
    #define fonctionsH
     
    // Declaration des librairies
    #include <string.h>
    #include <errno.h>
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "complex.h"
     
    // Declaration des constantes
    #define NB_CHARGE 		5
    #define NB_MES 			24
    #define NB_TEMP 		7
    #define LIGNES_1 		NB_TEMP*NB_MES
    #define LIGNES_2 		120						//=NB_MES*NB_CHARGE
    #define COLONNES 		7
    #define SEP 			" ,',','\t'"
    #define PI				3.141592654
    #define NB_PT			295
     
    // Definitions type
    typedef struct {double r; double i;} fcomplex;
     
    /************--- Declaration des prototypes des fonctions ---*******************/
    extern fcomplex Complex(double re, double im);
    void linearisation (void);
    	void smica_int (double **, double **, fcomplex, fcomplex, fcomplex, fcomplex, fcomplex, double);
     
    #endif

    Code code.c : 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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    #include "fonctions.h"
     
     
    void main (void)
    {
    	int frqs = 1;							// Frequence
    	double threshold = 0.0070;
    	double intconsts[7*NB_PT][7];		// tableau de valeurs recuperee d'un fichier (valeur decimales positie ou negative)
    	double ppp[4][7];					// tableau de stockage de calcul
     
    	// Definition variables complexe
    	fcomplex open;
    	fcomplex etal1;
    	fcomplex etal2;
    	fcomplex etal3;
    	fcomplex etal4;
     
    	smica_int (intconsts, ppp, etal1, etal2, etal3, etal4, open, threshold);
    }
     
    void smica_int (double **intconsts, double **ppp, fcomplex etal1, fcomplex etal2, fcomplex etal3, fcomplex etal4, fcomplex open, double threshold, int frqs)
    {
    /*****************--- Definition des variables ---********************/
    	// Variables complexes
    	fcomplex q1;
    	fcomplex q2;
    	fcomplex q3;
    	fcomplex q4;
    	fcomplex q[4];
     
    	// Varaibles de type double
    	double kkk1 = 0, kkk2 = 0, kkk3 = 0, kkk4 = 0, erro = 0, ksum = 0;
    	double kkk[4] = {0};
    	double p[4][7] = {0};
     
    	//Variables de type int
    	int i, j, erroidx = 0; 			// Variables pour les boucles
     
     
    /************--- Initialisation des variables complexes ---*************/
    	q1 = Complex(0, 0);
    	q2 = Complex(0, 0);
    	q3 = Complex(0, 0);
    	q4 = Complex(0, 0);
    	for (i = 0; i < 5; i++)
    	{
    		q[i] = Complex(0, 0);
    	}
     
    /*********************************************************************/
    	kkk[1] = intconsts[ 3][1];
    	kkk[2] = intconsts[ 6][1];
    	kkk[3] = intconsts[ 9][1];
    	kkk[4] = intconsts[12][1];
    	q[1].r = intconsts[ 1][1] * cos(intconsts[ 2][1] * PI / 180);
    	q[1].i = intconsts[ 1][1] * sin(intconsts[ 2][1] * PI / 180);
    	q[2].r = intconsts[ 4][1] * cos(intconsts[ 5][1] * PI / 180);
    	q[2].i = intconsts[ 4][1] * sin(intconsts[ 5][1] * PI / 180);
    	q[3].r = intconsts[ 7][1] * cos(intconsts[ 8][1] * PI / 180);
    	q[3].i = intconsts[ 7][1] * sin(intconsts[ 8][1] * PI / 180);
    	q[4].r = intconsts[10][1] * cos(intconsts[11][1] * PI / 180);
    	q[4].i = intconsts[10][1] * sin(intconsts[11][1] * PI / 180);
    }
     
     
     
    /*
     *Fonction: Complex
     *Usage: z = Complex(x, y);
     *--------------------------
     *Cette fonction retourne un nombre complexe a partir de sa
     *partie reelle x et de sa partie imaginaite y
     */
    extern fcomplex Complex(double re, double im)
    {
    	fcomplex c;
    	c.r = re;
    	c.i = im;
    	return c;
    }

  2. #2
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Regarde bien sur le net comment transmettre un tableau de dimension 2 à une fonction.

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void main (void)
    {
    ....
    	double intconsts[7*NB_PT][7];		// tableau de valeurs recuperee d'un fichier
    ....	double ppp[4][7];					// tableau de stockage de calcul
    ....	
    	smica_int (intconsts, ppp, etal1, etal2, etal3, etal4, open, threshold);
    }
     
    void smica_int (double **intconsts, double **ppp, .......)
    Le type de ces paramètres est faux : intconsts et ppp dans l'appel à smica_int ne sont pas du type double ** (le nombre d'étoiles n'a rien à voir avec le nombre de dimensions du tableau passé en argument). Ce doit être le type "adresse d'un élément du tableau".
    Les éléments de ces tableaux sont eux-mêmes des tableaux de 7 doubles : double [7].
    L'adresse de ces éléments est du type adresse d'un tableau de 7 doubles : double (*)[7].

    On devrait avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void smica_int (double (*intconsts)[7], double (*ppp)[7], .......)
    //ou
    void smica_int (double intconsts[][7], double ppp[][7], .......)
    - Noter que main renvoie toujours un int
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    Décembre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Décembre 2008
    Messages : 53
    Points : 44
    Points
    44
    Par défaut
    Merci, ça va beaucoup m'aider.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème passage de paramètre à un bean
    Par Niniz dans le forum JSF
    Réponses: 5
    Dernier message: 01/08/2007, 16h26
  2. problème passage de paramètres
    Par langelot222 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/07/2007, 16h25
  3. Réponses: 12
    Dernier message: 15/06/2007, 19h16
  4. Réponses: 3
    Dernier message: 18/08/2006, 10h20
  5. [NEWBIE] Problème passage en paramètre
    Par Goundy dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2005, 20h18

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