Allocation dynamique d'une matrice : en C
Fermé
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
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
A voir également:
- Allocation dynamique d'une matrice en c
- Tableau croisé dynamique - Guide
- Liste déroulante dynamique excel - Guide
- Impossible d'afficher le rapport de tableau croisé dynamique sur un rapport existant ✓ - Forum Excel
- Le nom du champ de tableau croisé dynamique n'est pas valide ✓ - Forum Excel
- Vous ne pouvez pas modifier une partie de matrice - Forum Excel
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
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
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
8 mars 2009 à 12:20
#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);
}
8 mars 2009 à 12:27
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.
14 déc. 2015 à 21:34
14 déc. 2015 à 21:33