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;
}