Passage d'un tableau dynamique en parametres

Résolu
Vie2006 Messages postés 15 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 20 février 2007 - 20 févr. 2007 à 03:18
cs_azamharir Messages postés 55 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 1 novembre 2008 - 20 févr. 2007 à 22:30
Bonjour

Je declare un tableau a deux dimensions dynamique. ensuite,  j'alloue la memoire d'une facon dynamiques.

Sauf que lorsque je passe le tableau en parametres à une autre fonction et lorsque je veux remplire mon tableau, un bogue apparait. voici un exemple de mon code

Void main ()
{  
   float **S;
   int status;

   S = (float *) malloc (4* sizeof(float));
   for (i = 0; i<4; i++)
   {
           S[i] = (float *) malloc ((5)* sizeof(float));
   }
     status = Fontionc (S)

   
}

int Fonction (float **S)
{
      
      S[0][0] = 4; // C'est la ou le bogue apparaite

}

5 réponses

24Karas Messages postés 233 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 5 juillet 2008
20 févr. 2007 à 09:10
Surement parce que ta fonction "Fonction" DOIT retourner un int et ne retourne rien, donc ta variable status ne sait pas quoi recupérer ! T'aurais pas un warning à la compilation ? c'est quoi le compilo merdique que tu utilises ?

le code suivant marche bien ici ...

#include <stdio.h>
#include <stdlib.h>

int Fonction (float **S)
{
        S[0][0] = 4;
        return 0;         // MANQUE LE RETURN ICI
}

int main (void)
{
        float   **S;
        int     i;
        int status;

        S = (float **) malloc (4* sizeof(float *));            // MANQUE UNE ETOILE DEVANT LE malloc
        for (i = 0; i<4; i++)
        {
                S[i] = (float *) malloc ((5)* sizeof(float));
        }

        status Fonction(S);                     // APPEL DE Fonction ET NON Fonctionc

        fprintf(stderr,"%f\n",S[0][0]);

        return 0;
}
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
20 févr. 2007 à 13:00
int Fonction (float **S)
{
        S[0][0] = 4;  <= c'est surtout ici que c'est illégal
        return 0;
}

Il connait pas la taille des dimensions, donc tu peux pas passer ton tableau comme ca. Le plus simple c'est de travailler sur un tableau 1D.
0
cs_azamharir Messages postés 55 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 1 novembre 2008
20 févr. 2007 à 14:43
salut

[auteurdetail.aspx?ID=615769 Vie2006]



essai ça :

S = (float**) malloc (4 );
   for (int i = 0; i<4; i++)
        S[i]= (float *) malloc (sizeof(float));
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
20 févr. 2007 à 20:36
Bonsoir,

Essaie de poster un code qui compile et ensuite on verra les bogues !!!

bertrand@nestor:~/tmp$ gcc -W -Wall main.c
main.c:1: error: erreur de syntaxe before "main"
main.c:2: attention : return type defaults to `int'
main.c: Dans la fonction « main »:
main.c:6: attention : implicit declaration of function `malloc'
main.c:6: attention : affectation d'un type pointeur incompatible
main.c:7: error: `i' undeclared (first use in this function)
main.c:7: error: (Each undeclared identifier is reported only once
main.c:7: error: for each function it appears in.)
main.c:11: attention : implicit declaration of function `Fontionc'
main.c:14: error: erreur de syntaxe before '}' token

Matt...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_azamharir Messages postés 55 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 1 novembre 2008
20 févr. 2007 à 22:30
salut, ton probleme est au niveau de l'allocation de la memoire pour S.
tu proccede ainsi : 
S = (float *) malloc (4* sizeof(float));
 for (i = 0; i<4; i++)
 {
      S[i] = (float *) malloc ((5)* sizeof(float));
  }

ce qui est faux car il s'agit de double pointeur.
donc la solution est :
S = (float**) malloc (4 );
 for (int i = 0; i<4; i++)
       S[i]= (float *) malloc (sizeof(float));

voici un exemple simple de code testé :

#include<stdio.h>
#include<malloc.h>
void fonction(float **S)
{
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
        {
            printf("entrer S[%d][%d] = ",i,j);
            scanf("%f",&S[i][j]);
        }
}

void affiche(float **S)
{
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
            printf("%f\t",S[i][j]);
            printf("\n");
    }
}

void main()
{
    float **S;

    S = (float**) malloc (4 );
    for (int i = 0; i<4; i++)
        S[i]= (float *) malloc (sizeof(float));
    fonction(S);
    affiche(S);
}

   
0
Rejoignez-nous