Pointeur de pointeur

Résolu/Fermé
kenson72000 Messages postés 5 Date d'inscription lundi 21 janvier 2013 Statut Membre Dernière intervention 11 février 2013 - 23 janv. 2013 à 17:42
kenson72000 Messages postés 5 Date d'inscription lundi 21 janvier 2013 Statut Membre Dernière intervention 11 février 2013 - 24 janv. 2013 à 15:47
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

KX Messages postés 16605 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 6 octobre 2022 2 975
23 janv. 2013 à 17:59
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*)); 
2
kenson72000 Messages postés 5 Date d'inscription lundi 21 janvier 2013 Statut Membre Dernière intervention 11 février 2013
24 janv. 2013 à 15:47
merçi KX tu es trop fort l'instruction a = malloc(n*sizeof(int*)); a débloqué tt le pb. Merçi encore
0
kratosmindfreak Messages postés 43 Date d'inscription mercredi 23 janvier 2013 Statut Membre Dernière intervention 1 février 2013
23 janv. 2013 à 18:35
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
KX Messages postés 16605 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 6 octobre 2022 2 975
23 janv. 2013 à 18:37
Dans ce cas il faut changer tous les a[i][j] en a[n*i+j]
0
kenson72000 Messages postés 5 Date d'inscription lundi 21 janvier 2013 Statut Membre Dernière intervention 11 février 2013
23 janv. 2013 à 18:45
la signature de la fonction m'a été imposée c'est pour cela que j'utilise int **a.
0
kratosmindfreak Messages postés 43 Date d'inscription mercredi 23 janvier 2013 Statut Membre Dernière intervention 1 février 2013
23 janv. 2013 à 21:18
changer a[i][j] ->>>> *(a+i*n+j)
0
fiddy Messages postés 11067 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 813
23 janv. 2013 à 21:21
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.
0
kratosmindfreak Messages postés 43 Date d'inscription mercredi 23 janvier 2013 Statut Membre Dernière intervention 1 février 2013
Modifié par kratosmindfreak le 23/01/2013 à 23:23
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
fiddy Messages postés 11067 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 813
23 janv. 2013 à 23:11
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*.
0
kratosmindfreak Messages postés 43 Date d'inscription mercredi 23 janvier 2013 Statut Membre Dernière intervention 1 février 2013
23 janv. 2013 à 23:22
dsl j'ai oublier de mettre int a la place de double :)
0
kratosmindfreak Messages postés 43 Date d'inscription mercredi 23 janvier 2013 Statut Membre Dernière intervention 1 février 2013
23 janv. 2013 à 23:23
le cast ca depend de compilateur par exemple Dev c++ necessite un cast
0
fiddy Messages postés 11067 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 813
23 janv. 2013 à 23:39
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++...
0
KX Messages postés 16605 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 6 octobre 2022 2 975
23 janv. 2013 à 23:40
"Dev c++ necessite un cast" parce que c'est du C++ ici on parle de C
0