Rechercher : dans
Par :

Allocation dynamique d'une matrice : en C

Dernière réponse le 8 mar 2009 à 12:30:05 nadia09, le 11 mai 2008 à 11:57:30 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Firefox 2.0.0.14

Meilleures réponses pour « Allocation dynamique d'une matrice : en C » dans :
[Windows XP SP2] Connectivité limitée ou inexistante VoirSi le réseau ne fonctionne pas Si le réseau fonctionne malgré tout Problème sur la couche réseau Cas particulier du WiFi Si le réseau ne fonctionne pas Il s'agit d'un problème de DHCP (allocation dynamique d'adresse IP). Vérifiez que...
Les objets en langage C++ VoirLa création d'objets En C++, il existe deux façons de créer des objets, c'est-à-dire d'instancier une classe : de façon statique de façon dynamique La création statique La création statique d'objets consiste à créer un objet en lui affectant un...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...

1

Jean_38, le 11 mai 2008 à 12:00:31

Bonjour,
Il faut bien déclarer le tableau après avoir mis ça taiille dans une variable (ou deux d'ailleurs)

Répondre à Jean_38

2

nadia09, le 11 mai 2008 à 12:40:53

Merci mais comment je dois faire j'ai tout essayer

Répondre à nadia09

3

Jean_38, le 11 mai 2008 à 12:50:40

ça fait un petit moment que j'ai pa fait de c mais si tu fais

int mavar;
tu demande la taille tu la met dans mavar avec (scanf() ou get()
et ensuite tu déclare le tableau
char tab[mavar] par exemple

pareil avec deux dimensions

Répondre à Jean_38

4

belhauss, le 11 mai 2008 à 16:01:32

Fait nous voire ce que t'as fais :)

Répondre à belhauss

5

aminovic41, le 21 fév 2009 à 00:35:09
  • +1

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

Répondre à aminovic41

6

JLDR69, le 8 mar 2009 à 12:20:57

#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);



}

Répondre à JLDR69

7

fiddy, le 8 mar 2009 à 12:27:15

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.
Google is your friend

Répondre à fiddy

8

 CréNomDunChien, le 8 mar 2009 à 12:30:05

Bonjour,

Tu peux nous mettre ton code de déclaration et d'initialisation de tes tableaux stp ?.

Répondre à CréNomDunChien
Collection CommentÇaMarche.net