Erreur de segmentation en C

Fermé
youssef2007 Messages postés 28 Date d'inscription mercredi 14 février 2007 Statut Membre Dernière intervention 12 février 2008 - 31 déc. 2007 à 15:45
youssef2007 Messages postés 28 Date d'inscription mercredi 14 février 2007 Statut Membre Dernière intervention 12 février 2008 - 1 janv. 2008 à 20:32
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

3 réponses

youssef2007 Messages postés 28 Date d'inscription mercredi 14 février 2007 Statut Membre Dernière intervention 12 février 2008 3
1 janv. 2008 à 10:18
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
youssef2007 Messages postés 28 Date d'inscription mercredi 14 février 2007 Statut Membre Dernière intervention 12 février 2008 3
1 janv. 2008 à 20:32
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
0