Allocation dynamique d'une matrice : en C

Fermé
nadia09 - 11 mai 2008 à 11:57
 nassima - 14 déc. 2015 à 21:34
Bonjour,
je veux créer un tableau a 2 dimension en C dont sa taille est entrée par l'utilisateur et cette taille est assez grande (la matrice est au moins de taille 100*100) sauf que lors de l'exécution mon ordinateur se plante je sais pas si c'est un problème de mémoire ou c'est une mal utilisation des pointeurs ou une mal création de la matrice elle même.
Merci de répondre le plus vite possible et de me renseigner ou bien sur un cours complet de C qui traite ce genre de problème ou quelque chose qui peut m'aider

6 réponses

aminovic41 Messages postés 35 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 30 août 2013 20
21 févr. 2009 à 00:35
l'allocation statique est très simple à faire, mais si jamais tu dois utiliser des pointeurs dans ton programme alors tu as prendre en compte que les valeurs de la matrices sont de la forme **; pas seulement *.
Mais une solution bien plus simple si tu as un probleme de mémoire ce qui peut probable (allocation dynamique)
voila du code::(c'est le constructeur de la classe matice)
matrice(int l,int c,int m)
{
int i;
M=(int**) malloc (sizeof(int*)*l);
for (i=0; i<l; i++)
Aj[i]=(double*) malloc (sizeof(int)*c);
}


amine
4
#include <stdio.h>
#include <stdlib.h>
// Allocation Dynamique du Tableau - Matrice5.c

int main(int argc, char *argv[])
{
int i,j,l,nbColA,nbColB, k, l2;

double **A;
double **B;
double **P;

////////////////////////A//////////////////////

printf("Donner le nombre des lignes de la matrice A\n");
scanf("%d",&l);
printf("Donner le nombre des colonnes de la matrice A\n");
scanf("%d",&nbColA);

A=(double **) malloc(l*sizeof(double*));

for (i=0; i<l; i++)
A[i]=(double *) malloc(nbColA*sizeof(double));

printf("Enter les elements de la matrice A\n");
for(i=0;i<l;i++)
for(j=0;j<nbColA;j++)
{
printf("Enter la valeur de A[%d][%d] ",i,j);
scanf("%lf",&A[i][j]);
printf("\n");
}
printf("\n===> Matrice A <===\n");
for (i=0;i<l;i++)
{
for(j=0;j<nbColA;j++)
printf("%lf ", A[i][j]);
printf("\n");
}

////////////////////////B//////////////////////

B=(double **) malloc(l*sizeof(double*));
l2=nbColA;
printf("le nombre des lignes de la matrice B est %d\n",l2);
printf("Donner le nombre des colonnes de la matrice B\n");
scanf("%d",&nbColB);

for (i=0; i<l2; i++)
B[i]=(double *) malloc(nbColB*sizeof(double));

printf("Enter les elements de la matrice B\n");
for(i=0;i<l2;i++)
{
for(j=0;j<nbColB;j++)
{
printf("Enter la valeur de B[%d][%d] ",i,j);
scanf("%lf",&B[i][j]);
printf("\n");
}
}

printf("\n===> Matrice B <===\n");
for (i=0;i<l2;i++)
{
for(j=0;j<nbColB;j++)
printf(" %lf ", B[i][j]);
printf("\n");
}

////////////////////////P//////////////////////
P=(double **) malloc(l*sizeof(double*));

for (i=0; i<l; i++)
P[i]=(double *) malloc(nbColA*sizeof(double));

/* la matrice résultante est la matrice P */



printf("Le produit des matrices A et B est la matrice P : \n");

for (i = 0; i < l; i++)
for (j = 0; j <nbColB; j++)
{
int k;
P[i][j] = 0;
for (k = 0; k < nbColA; k++)
{
P[i][j] = P[i][j] + A[i][k] * B[k][j];
}
}




printf("\n===> Matrice P <===\n");
for (i=0;i<l;i++)
{
for(j=0;j<nbColB;j++)
printf("%lf ", P[i][j]);
printf("\n");
}

return 0;

free(A);
free(B);
free (P);



}
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 814 > JLDR69
8 mars 2009 à 12:27
Salut,
Mettre du code après le return 0, ça sert strictement à rien.
De plus, tu n'as pas libéré toute la mémoire. Il y aura plein de zones dans le heap qui ne seront pas désallouées.
0
nassima > JLDR69
14 déc. 2015 à 21:34
bravo très bien magnifique
0
très bien magnifique
0