begin process at 2012 05 30 01:42:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

probleme d'allocation d'une matrice


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme d'allocation d'une matrice

jeudi 30 décembre 2010 à 14:10:12 | probleme d'allocation d'une matrice

emomar

salut à tous voila j'ai un probleme avec la fonction remplir voila le code si quelqu'un peut m'aider merci
code :
Code C/C++ :
#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);
}
jeudi 30 décembre 2010 à 14:26:53 | Re : probleme d'allocation d'une matrice

TychoBrahe

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.
jeudi 30 décembre 2010 à 14:33:06 | Re : probleme d'allocation d'une matrice

CptPingu

Administrateur CodeS-SourceS
Ton allocation est étrange.
Si tu as une matrice, tu dois allouer la taille puis taille * largeur.

Ex tableau de 3 par 4:
Code C/C++ :
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/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
jeudi 30 décembre 2010 à 14:33:18 | Re : probleme d'allocation d'une matrice

emomar


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

jeudi 30 décembre 2010 à 14:36:31 | Re : probleme d'allocation d'une matrice

emomar

oui je fais du c
j'ai pas bien compris ton example tu peux m'expliqué merci
jeudi 30 décembre 2010 à 14:39:30 | Re : probleme d'allocation d'une matrice

buno

Administrateur CodeS-SourceS
Yop,
J'ajouterais que l'allocation en elle-même est un peu louche...
Généralement, on alloue un tableau 2D de la manière suivante:
Code C/C++ :
T=(int**)malloc(n*sizeof(int*));
for (int i=0; i<n; i++)
{
  T[i] = (int*)malloc(m*sizeof(int));
  for (int j=0; j<m; j++)
  {
    printf("donner la valeur de l'élément (%d,%d): ", i, j);
    scanf("%d",&T[i][j]);
  }
}



@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
jeudi 30 décembre 2010 à 14:42:54 | Re : probleme d'allocation d'une matrice

buno

Administrateur CodeS-SourceS
*tain!! Double-grilled, là...ma connexion est à la masse...sorry

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
jeudi 30 décembre 2010 à 15:06:07 | Re : probleme d'allocation d'une matrice

CptPingu

Administrateur CodeS-SourceS
@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/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question


Cette discussion est classée dans : int, printf, void, for, donner


Répondre à ce message

Sujets en rapport avec ce message

Problem Affichage de mon Tableau [ par Orezza ] salut à tous, j'ai un blem à l'affichage du tableau. l'utilisateur parametre son tableau, c lui qui l'initilize mais j'arrive pas à afficher apres le affichage de caractere dans une grille [ par anzelus ] bonjour, voila, je suis un debutant en c, je dois faire un programme qui affiche une grille de points sur console, apres afficher un caractere special pb en c urgenttttttttttttttttt [ par natacha86 ] bonjour, j'ai un probleme avec mon programme, il ne veut pas sortir, j'ai fais un menu et apparement ya un bug mais je ne comprend rien.le code est as help une fonction qui a besoin de vous [ par natacha86 ] Re bonjour a tout le monde, voila j'ai mis tout le prog si vous voulez tester, en fait le pb viens de la fonctino tri_shell(), je ne sais pas pkoi ell bitte hilfe!!!!!!!!! [ par sansan_2 ] Bonjour!!!!!!!! le programme c est un FIFO (ringpufffer) et j aimerais avoir une amelioration. Apres execution du programme, faire une tabulation, un Bug windows avec mon programme (nivo débutant) [ par MATHIS49 ] Bonjour ! Etant un gros debutant en C je m'essai à faire un programme d'amortissement tout simple. Mais le probleme c'est que windows plante lorsque j methode de simplexe en c [ par antttar ] #include #include #include #include #include #include #include </ compilation mai au lancement "erreur la memoire ne peu pas pas etre read" [ par touny23 ] je maitrise pas tro le C.mai comme j ai un projet a faire dessus pour la rentré , je sui obligé de m y mettre .j arrive a compiler sous dev-cpp mai lo execution en DEV C++ [ par lucky31 ] bonsoir, j'ai 1 probleme avec l'execution de mon prg ecrit en c et j'utilise le dev c++voila mon code source alors si vous pouvez m'aider merci d'avan parcourir un labyrinthe [ par emmy75fr ] <fo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales