emomar
Messages postés4Date d'inscriptionjeudi 30 décembre 2010StatutMembreDernière intervention 4 octobre 2012
-
30 déc. 2010 à 14:10
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
30 déc. 2010 à 15:06
salut à tous voila j'ai un probleme avec la fonction remplir voila le code si quelqu'un peut m'aider merci
code :
#include <stdio.h>
#include <stdlib.h>
int n,m;
void dimen()
{
printf("donner le nbre de ligne");
scanf("%d",n);
printf("donner le nbre de colonne");
scanf("%d",m);
}
void Affich(int **A)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d\t",A[i][j]);
printf("\n");
}
}
void remplir(int **T)
{
int *z;
int i,j;
printf("donner le nbre de ligne");
scanf("%d",&n);
printf("donner le nbre de colonne");
scanf("%d",&m);
z=(int*)malloc(n*m*sizeof(int)); /*allocation d'espace pour les elements de la matrice*/
T=(int**)malloc(n*sizeof(int*)); /*allocation d'espace pour le vecteur de pointeurs*/
/*remplissage du vecteur pointeur*/
for(i=0;i<n;i++)
{
T[i]=z+i*m;
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("donner la valeur\n");
scanf("%d",&T[i][j]);
}
}
}
void Add(int **A,int **B)
{
int i,j;
printf("n = %d\n",n);/*juste pour verifier le contenu de n et m*/
printf("m = %d\n",m);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
A[i][j]=A[i][j]+B[i][j];
}
}
Affich(A);
}
void main()
{
int **A,**B;
remplir(A);
Affich(A);/* ca plante la tant dis que si je mets affiche dans la fonction ca marche */
remplir(B);
Affich(B);
Add(A,B);
}
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 201312 30 déc. 2010 à 14:26
Salut,
C'est juste un soucis de portée des variables. Dans remplir() tu alloue de la mémoire à T... sauf que T c'est qu'une copie du pointeur A (qui pointe sur n'
importe quoi). Bref, tu n'alloue pas de mémoire pour A et forcément... ça plante lorsque tu veux l'afficher. Ce n'est donc pas une copie de A que tu veux passer mais un pointeur dessus.
Quelques autres erreurs :
- Dans ta fonction dimen(), et plus particulièrement dans tes scanf(), c'est l'adresse de tes variables globales qu'il faut passer.
- Si tes matrices sont de taille différentes, la fonction Add() plante lamentablement.
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 30 déc. 2010 à 14:33
Ton allocation est étrange.
Si tu as une matrice, tu dois allouer la taille puis taille * largeur.
Ex tableau de 3 par 4:
int** tab = NULL;
int i = 0;
tab = malloc(3 * sizeof(int*));
for (i = 0; i < 3; ++i)
tab[i] = malloc(4 * sizeof(int));
PS: Si tu fais du C, utilise un compilateur de C, pas de C++. (En C, il n'y aucune raison de caster un malloc...)
Évite aussi les variables globales.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
emomar
Messages postés4Date d'inscriptionjeudi 30 décembre 2010StatutMembreDernière intervention 4 octobre 2012 30 déc. 2010 à 14:33
tout d'abord merci pour m'avoir repondu aussi rapidement
je vais voir ca et pour la fonction add j'ai pas fini je sais qu'il faut verifier les dimensions encore merci
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 30 déc. 2010 à 15:06
@buno: :D. En tous cas on donne vraiment les mêmes types de réponses ! :)
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question