Pointeur de pointeur

Résolu
Bonjour, s'il vous plaît j'aimerai savoir quel est le problème. Le code ci-dessous n'indique aucune erreur mais ça plante lors de l'exécution du programme.

main()
{
int i,j,n;

int **a;

printf("\tEntrer la dimension de votre matrice: ");

scanf("%d",&n);

for(i=0;i<n;i++)

{
a[i]=malloc(n*sizeof(int));

}

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("\tEntrer les elements de la ligne %d et de la colonne %d: ",i,j);
scanf("%d",&a[i][j]);
}
}

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

printf("\tVoici l' element de la ligne %d et de la colonne %d %d: ",i,j, a[i][j]);

}
}

}

3 réponses

  1. Modérateur
    Avant de faire a[i]=malloc(n*sizeof(int)); il faudrait que a[i] existe, et donc que tu fasses d'abord un malloc sur le a :

    a = malloc(n*sizeof(int*)); 
    1. merçi KX tu es trop fort l'instruction a = malloc(n*sizeof(int*)); a débloqué tt le pb. Merçi encore
  2. a la place de" int **a " tu peut seulement utiliser un pointeur "int *a" puis pour allouer dynamiquement tu vas juste taper: a=(int*)malloc(n*n*sizeof(int))
    1. Modérateur
      Dans ce cas il faut changer tous les a[i][j] en a[n*i+j]
    2. la signature de la fonction m'a été imposée c'est pour cela que j'utilise int **a.
    3. changer a[i][j] ->>>> *(a+i*n+j)
    4. Contributeur
      Oui. Mais kenson72000 vient de dire que int **a était imposé ^^.
      Il faut donc bien qu'il alloue a=malloc(n*sizeof(int*)); comme dit par KX.
  3. donc il faut faire:
    int **a;
    a=(int **) malloc(n*sizeof((int*));

    for (i=0; i<n; i++)
    a[i]=(int *) malloc(n*sizeof(int));
    1. Contributeur
      Oui c'est ce que dit KX.
      Sauf qu'il a mis sizeof(int*) au lieu de sizeof(double*). Techniquement c'est pareil, mais je ne vois pas l'intérêt de mettre du double* quand il est question de int...
      De plus, le cast est superflu : conversion automatique de void*.
    2. dsl j'ai oublier de mettre int a la place de double :)
    3. le cast ca depend de compilateur par exemple Dev c++ necessite un cast
    4. Contributeur
      Non ça ne dépend pas du compilateur !
      Le cast n'est pas obligatoire en C conformément à la norme ISO C89/90.
      Si ton compilateur crie, c'est qu'il est en mode C++...
    5. Modérateur
      "Dev c++ necessite un cast" parce que c'est du C++ ici on parle de C