Erreur de segmentation en C

youssef2007 Messages postés 28 Statut Membre -  
youssef2007 Messages postés 28 Statut Membre -
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

  1. youssef2007 Messages postés 28 Statut Membre 3
     
    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
  2. youssef2007 Messages postés 28 Statut Membre 3
     
    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
  3. thomas
     
    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
    0