Out of band code c

yassinmo -  
w1sm3rhi11 Messages postés 372 Statut Membre -
bonjour,
je travaille sur une matrice de dimension mat[1000][1000] qui n'est pas si grande alors que dans la compilation du c j'ai le warning out of band est ce que vous avez une soluation pour ça merci
Configuration: Windows XP
Firefox 2.0

7 réponses

  1. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
     
    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
    0
  2. yassinmo
     
    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
    0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    Es-tu certain que c'est cette matrice et non pas un autre bout de code qui génère ce message ?
    0
  4. yassinmo
     
    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.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. yassinmo
     
    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;
    }
    0
  7. belovak
     
    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].
    0
  8. w1sm3rhi11 Messages postés 372 Statut Membre 53
     
    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 :
    *(*(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.
    0