Erreur de segmentation en C

Bonjour,

voici le simple programme que je le fais pour tester l'affichage d'une tableau à 2 dimensions :

#include<stdio.h>

main()
{
int a[2][2];int i,j;

for(i=0;i<2;i++)
{
for(j=0;j<2;j++)

a[i][j] = 1;
}

affich(a);
}

affich(int** a)
{

printf("%d",*(*(a+1)+1));
}

la compilation a bien marché mais aprés exécution il me retourne
" erreur de segmentation "
j'utlise fedora 7 et j ai besoins de votre aide pour continuer mon tp ,

merci d'avance pour tt aide
Configuration: Linux Fedora7
Firefox 2.0.0.3

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. bonjours,

    bonne année Tout le monde ,
    joyeuse année 2008 Thomas , et merci pour votre reponse mais le problème se continue "erreur de segmentation " (avec la 2eme version de ta solution)

    aussi j'ai pas compris comment fonctionne ce code :
    main(){
    
    int *a; //declaration d'un pointeur
    int i,j;
    
    
    for(i=0;i<2;i++){
    for(j=0;j<2;j++){
    *a = 1;  //        c'est equivalent à a[i][j] = 1; !!????
    a++;
    }
    } 


    enfin ,il est de préferable que la fonction d'affichage soit dans une fonction indépendante

    merci autrefois et @+
    1. bonsoir,
      mon problème est résolu et voici la solution :

      #include<stdio.h>

      void affich(int **a)
      {

      printf("%d",a[1][1]); //affich just de la case a[1][1]
      }
      int main()
      {
      int **a;int i,j;
      a=(int **) malloc(2*sizeof(int *));
      for(i=0;i<2;i++)
      a[i]=(int *) malloc(2*sizeof(int));
      for(i=0;i<2;i++)
      {
      for(j=0;j<2;j++)

      a[i][j] = 1;
      }

      affich(a);
      return 0;
      }

      grand merci pour mype
      1. Bonjour bonjour,

        Les erreurs de segmetation sont un tres grand classique en C. Il decoule tres souvent d'une erreur de pointeur.

        Il provient probablement de ces ligne :

        affich(int** a) // Que veurt tu afficher avec cette ligne?
        {
        printf("%d",*(*(a+1)+1)); //???????????? comprend pas ce que tu veux faire


        Pour afficher un tableau 2 dimension :


        avec taille definie :


        main(){

        int a[2][2];
        int i,j;

        for(i=0;i<2;i++){
        for(j=0;j<2;j++){
        a[i][j] = 1;
        }
        }

        for(i=0;i<2;i++){
        for(j=0;j<2;j++){
        printf("a[%d][%d]=%d",i,j,a[i][j]);
        }
        }

        Avec des pointeurs:

        main(){

        int *a; //declaration d'un pointeur
        int i,j;

        for(i=0;i<2;i++){
        for(j=0;j<2;j++){
        *a = 1;
        a++;
        }
        }

        for(i=0;i<2;i++){
        for(j=0;j<2;j++){
        printf("a[%d][%d]=%d",i,j,*a);
        a++;
        }
        }

        Voila en esperant que ça t'aide