Out of band code c
Fermé
yassinmo
-
16 mai 2007 à 14:24
w1sm3rhi11 Messages postés 372 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 30 mars 2009 - 20 sept. 2007 à 11:27
w1sm3rhi11 Messages postés 372 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 30 mars 2009 - 20 sept. 2007 à 11:27
A voir également:
- Out of band code c
- Code asci - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
- Code gta 4 ps4 - Guide
7 réponses
Stupeflip
Messages postés
391
Date d'inscription
jeudi 8 février 2007
Statut
Membre
Dernière intervention
4 décembre 2007
94
16 mai 2007 à 14:29
16 mai 2007 à 14:29
Bizarre j'ai tenté un
char mat[1000][1000]pour voir ça me met rien même en mettant tous les warnings. C'est ptet dû à autre chose ? Ta matrice c'est une matrice de quoi ? De char/int ? Ou c'est une structure ? Genre si tu fais par exemple une matrice de matrices de 1000x1000 à chaque fois je comprends que le compilo te fasse la gueule ;p
et ben ma matrice est une matrice de double et j'utilise comment compilateur le lcc-win32 et même avec le visual c++ 6.0 j'ai toujour le même problème
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
17 mai 2007 à 10:58
17 mai 2007 à 10:58
Es-tu certain que c'est cette matrice et non pas un autre bout de code qui génère ce message ?
je vais être plus claire enfin j'espère
j'ai la matrice indice[1000][1000] et quand je compile il me met un warning "indexing array indice[1000] out of bounds[1000] et si j'exécute le programme se ferme voila je vous remerci pour le temps que vous me consacerer pour me répondre.
j'ai la matrice indice[1000][1000] et quand je compile il me met un warning "indexing array indice[1000] out of bounds[1000] et si j'exécute le programme se ferme voila je vous remerci pour le temps que vous me consacerer pour me répondre.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
et voici le programme en détail
#include <stdio.h>
#include <math.h>
#include <complex.h>
int main(void){
int nx,nz,choix,N;
double Indice[1000][1000];
double tetam,tetae,F;
double pas_x,pas_z,Z_max,Z_min,za,X_max,X_min,k,lamda,pi;
complex Source[1000]
complex epsilon;
FILE *INDICE;
pi=acos(-1.);
// choix de la nature du milieu de propagation
printf("Veuiller choisir la nature de milieu de propagation :\n");
printf("- pour un milieux classique taper 1 \n");
printf("- pour un milieux à effet conduit taper 2 \n");
scanf("%d",&choix);
//Dimensionnement de la carte d'indice de réfraction (zone de propagation)
printf("Donner les distances minimale et maximale des profils d'indice de refraction en metre");
scanf("%lf %lf",&X_min,&X_max);
printf("Donner le pas de resolution horizental en metre");
scanf("%lf",&pas_x);
printf("Donner les valeurs minimale et maximale de l'altitude z en metres");
scanf("%lf %lf",&Z_min,&Z_max);
//Caracterisation des parametres d'emmission et du mileu de propagation
printf("Donner la demi largeur du lobe principal : tetam");
scanf("%lf",&tetam);
printf("Donner l'angle d'emission : tetae");
scanf("%lf",&tetae);
printf("Donner la permettivite electrique relative complexe du milieu marin (reel, imag)\n");
scanf("%lf",&epsilon);
printf("Donner la valeur de la frequence d'emission F en GHz:");
scanf("%lf",&F);
lamda=3e8/(F*1e9);
k=2.*pi/lamda;
printf("Donner l'elevation de la source par rapport a la surface en metre");
scanf("%lf",&za);
//Calcule de pas d'échantillonnage suivant z et la résolution de la carte d'indice de réfraction
nx=(int)((Z_max-Z_min)/pas_x);
pas_z=1/(2.*k*sin(tetam));
nz=(int)((Z_max-Z_min)/pas_z);
//Calcul de la valeur de N pour l'utilisation de la FFT
if (nz==(int)pow(2,(int)(log(nz)/log(2)))){
N=nz;
}
else{
N=(int)pow(2,(int)(log(nz)/log(2)+1));
}
//Génération de la carte à l'aide de la fonciton indice
indice(nx,nz,pas_z,choix);
//lecture de la matrice d'indice de réfraction
if (choix==1){
INDICE=fopen("Indice_classique.txt","r");
}
else {
INDICE=fopen("Indice_conduit.txt","r");
}
fscan_mat (INDICE,Indice[1000][1000],nx,nz);
//Génération de la source d'émission
source(Source[1000],tetam,tetae,F,za,epsilon,N,nz);
//Calcul de la propagation
//Prabolique(Indice[1000][1000],nx,nz,)
return 0;
}
#include <stdio.h>
#include <math.h>
#include <complex.h>
int main(void){
int nx,nz,choix,N;
double Indice[1000][1000];
double tetam,tetae,F;
double pas_x,pas_z,Z_max,Z_min,za,X_max,X_min,k,lamda,pi;
complex Source[1000]
complex epsilon;
FILE *INDICE;
pi=acos(-1.);
// choix de la nature du milieu de propagation
printf("Veuiller choisir la nature de milieu de propagation :\n");
printf("- pour un milieux classique taper 1 \n");
printf("- pour un milieux à effet conduit taper 2 \n");
scanf("%d",&choix);
//Dimensionnement de la carte d'indice de réfraction (zone de propagation)
printf("Donner les distances minimale et maximale des profils d'indice de refraction en metre");
scanf("%lf %lf",&X_min,&X_max);
printf("Donner le pas de resolution horizental en metre");
scanf("%lf",&pas_x);
printf("Donner les valeurs minimale et maximale de l'altitude z en metres");
scanf("%lf %lf",&Z_min,&Z_max);
//Caracterisation des parametres d'emmission et du mileu de propagation
printf("Donner la demi largeur du lobe principal : tetam");
scanf("%lf",&tetam);
printf("Donner l'angle d'emission : tetae");
scanf("%lf",&tetae);
printf("Donner la permettivite electrique relative complexe du milieu marin (reel, imag)\n");
scanf("%lf",&epsilon);
printf("Donner la valeur de la frequence d'emission F en GHz:");
scanf("%lf",&F);
lamda=3e8/(F*1e9);
k=2.*pi/lamda;
printf("Donner l'elevation de la source par rapport a la surface en metre");
scanf("%lf",&za);
//Calcule de pas d'échantillonnage suivant z et la résolution de la carte d'indice de réfraction
nx=(int)((Z_max-Z_min)/pas_x);
pas_z=1/(2.*k*sin(tetam));
nz=(int)((Z_max-Z_min)/pas_z);
//Calcul de la valeur de N pour l'utilisation de la FFT
if (nz==(int)pow(2,(int)(log(nz)/log(2)))){
N=nz;
}
else{
N=(int)pow(2,(int)(log(nz)/log(2)+1));
}
//Génération de la carte à l'aide de la fonciton indice
indice(nx,nz,pas_z,choix);
//lecture de la matrice d'indice de réfraction
if (choix==1){
INDICE=fopen("Indice_classique.txt","r");
}
else {
INDICE=fopen("Indice_conduit.txt","r");
}
fscan_mat (INDICE,Indice[1000][1000],nx,nz);
//Génération de la source d'émission
source(Source[1000],tetam,tetae,F,za,epsilon,N,nz);
//Calcul de la propagation
//Prabolique(Indice[1000][1000],nx,nz,)
return 0;
}
Bonsoir.
Je découvre votre problème, et bien que je ne l'ai pas reproduit, je pense qu'il provient du fait qu'un tableau commence à l'indice 0 en C.
Comme les tableaux se traduisent en fait par des pointeurs, accéder à Indice[1000][1000] correspond en fait à Indice+1000*1000*sizeof(double), et donc accède à une zone mémoire contenant n'importe quoi, en dehors de Indice[999][999].
Je découvre votre problème, et bien que je ne l'ai pas reproduit, je pense qu'il provient du fait qu'un tableau commence à l'indice 0 en C.
Comme les tableaux se traduisent en fait par des pointeurs, accéder à Indice[1000][1000] correspond en fait à Indice+1000*1000*sizeof(double), et donc accède à une zone mémoire contenant n'importe quoi, en dehors de Indice[999][999].
w1sm3rhi11
Messages postés
372
Date d'inscription
jeudi 20 septembre 2007
Statut
Membre
Dernière intervention
30 mars 2009
53
20 sept. 2007 à 11:27
20 sept. 2007 à 11:27
En fait, il faut voir ton tableau Indice comme ca :
Chaque case est un tableau de 1000 cases dont les indices vont de 0 à 999.
Si tu veut accéder au contenu du dernier élément par pointeur ca sera un truc comme ca :
Car ta variable Indice est du type double**
Plus simplement pour un tableau simple de 10 cases
Les indices iront de 0 à 9 et l'accession des éléments par pointeur seront :
Chaque case est un tableau de 1000 cases dont les indices vont de 0 à 999.
Si tu veut accéder au contenu du dernier élément par pointeur ca sera un truc comme ca :
*(*(Indice+999)+999)
Car ta variable Indice est du type double**
Plus simplement pour un tableau simple de 10 cases
int tab[10]
Les indices iront de 0 à 9 et l'accession des éléments par pointeur seront :
*tab //premier élément
*(tab+1) //le deuxième etc.