begin process at 2012 05 29 21:37:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Compression, Split & Cryptage

 > 

Probleme passage tab** de fonctions a fonction.


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

Probleme passage tab** de fonctions a fonction.

jeudi 12 novembre 2009 à 16:22:27 | Probleme passage tab** de fonctions a fonction.

Nitrakz


Bonjour tous le monde !

Comme l'explique le titre j'ai un petit soucis pour passer un tableaux a 2 dimensions tab[i][j] d'une fonction a une autre.

int func_1
{
int tab[4][4];

tab[0][0] = 4;
func_2(tab);
}

int func_2(int **tab)
{
putchar(tab[0][0]);
}

j'ai un segmentation fault lors de l'affichage tu tab[0][0].

merci pour vos reponses.
There is no place like 127.0.0.1 /
jeudi 12 novembre 2009 à 16:37:04 | Re : Probleme passage tab** de fonctions a fonction.

nickydaquick

Membre Club


Salut,

un tableau a 2 index est UN pointeur sur une zone de memoire. La tu utilises un pointeur sur un pointeur d'une zone de memoire comme argument dans la 2eme fonction (que tu devrais declarer plus haut), alors que tu lui passes tab , un tableau a 2 index.

Solution:
Code C/C++ :
int func_2(int *tab)
{
    putchar(tab[0]);
//calcul d'index a faire tab[a][b] = tab[a*dimensionIndex1+b]
}

int func_1()
{
    int tab[4][4];
    tab[0][0] = 4;
    func_2((int*)tab);
}


Bonne continuation.

http://liveplayaz.com
je suis heureux de faire partie d'une grande famille ...!
jeudi 12 novembre 2009 à 16:58:14 | Re : Probleme passage tab** de fonctions a fonction.

Nitrakz


Donc si j'ai bien compris:

tab[2][3] = tab[2*(4*4) + 3] ?

There is no place like 127.0.0.1 /
jeudi 12 novembre 2009 à 18:05:36 | Re : Probleme passage tab** de fonctions a fonction.

Nitrakz

J'ai essayer avec ta technique, enfin comme je pensait l'avoir compris mais sans succès toujours cette saleté de segfault.


There is no place like 127.0.0.1 /
jeudi 12 novembre 2009 à 18:35:00 | Re : Probleme passage tab** de fonctions a fonction.

BruNews

Administrateur CodeS-SourceS
Formule générale:
p[L * NCLS + C] == T[L][C]

int tab[2][3];
int *p = (int*) tab;

donc:
tab[1][2] = p[1 * 3 + 2]

ciao...
BruNews, MVP VC++
jeudi 12 novembre 2009 à 19:12:46 | Re : Probleme passage tab** de fonctions a fonction.

Nitrakz


yes okay good, je devrait m'en sortir avec ca :)

There is no place like 127.0.0.1 /
jeudi 12 novembre 2009 à 19:30:29 | Re : Probleme passage tab** de fonctions a fonction.

CptPingu

Administrateur CodeS-SourceS
Si tu veux vraiment passer un tableaux à deux dimension, il te faut passer les dimensions en argument:

Code C/C++ :
int display_tab(int **tab, int width, int height)
{
   int i = 0;
   int j = 0;

   for (i = 0; i < width; ++i)
     for (j = 0; j < height; ++j)
       printf("tab[%i][%i] = %i\n", i, j, tab[i][j]);
}

int main()
{
  int i = 0;
  int** tab = NULL;
  int width = 4;
  int height = 3;

  tab = malloc(width * sizeof (int*));
  for (i = 0; i < width; ++i)
  {
    tab[i] = malloc(height * sizeof (int));
    for (j = 0; j < width; ++j)
      tab[i][j] = i + j;
  }
  display_tab(tab, width, height);
}


A noter que int* et int[] peuvent être manier de la même façon, mais pas int** et int[][], d'où ton segmentation fault.

Une autre solution pour ne pas avoir à passer les dimensions, est d'encapsuler celles-ci dans une structure, ou de terminer chacun des tableau par un marqueur (NULL par exemple).
jeudi 12 novembre 2009 à 19:31:51 | Re : Probleme passage tab** de fonctions a fonction.

Nitrakz


Hum c'est bizarre ca marche mais uniquement pour la premiere ligne du tableau, les autres n'ont pas l'air davoir ete transmise.
*mod searcher*
There is no place like 127.0.0.1 /
jeudi 12 novembre 2009 à 19:57:15 | Re : Probleme passage tab** de fonctions a fonction.

Nitrakz


Tu pense que sa viens du fait que je declare le tableaux en dur (tab[9][9])?

There is no place like 127.0.0.1 /
jeudi 12 novembre 2009 à 23:42:21 | Re : Probleme passage tab** de fonctions a fonction.

CptPingu

Administrateur CodeS-SourceS
"int** tab" est différent de "int tab[][]".
Donc tu ne peux pas passer un tableau en dur à la fonction "display_tab" que j'ai écrite.

1 2

Cette discussion est classée dans : fonction, int, probleme, tab, func


Répondre à ce message

Sujets en rapport avec ce message

Pas compris les arguments [ par Bog ] Bonjour.Voila à chaque fois que je me lance dans un projet de programmation C++, je suis tjrs bloqué par certaines choses, surtout les arguments, et c Pas compris les arguments [ par Bog ] Bonjour.Voila à chaque fois que je me lance dans un projet de programmation C++, je suis tjrs bloqué par certaines choses, surtout les arguments, et c fonction d'alloaction dynamique [ par tomsawyerbelgique ] Pour une allocation dynamique d'un tableau à deux dimensions. Comme celle ci:cout // Initalisation int** tab = new int*[p_size1_tab]; for(in probleme avec la fonction GetAsyncKeyState() [ par aardman ] Bonjours,Je débute dans le c, et j'ai un petit probleme avec cette fonction.Je n'arrive pas a la faire fonctionner avec un int comme argument. Par exe Probleme avec les threads en C++ sour linux [ par benjamvs ] Bonjour,j'ai le probleme suivant a regler en C++je travaille sur les threads sous linux, avec la librairie "pthread"Lorsque je crée un thread, celui c Allocation dynamique dans une fonction [ par Veovis ] Salut,Toujours dans mon projet de TP, j'ai un petit soucis avec l'allocation dynamique dans une fonction. Ce que je voudrais faire c'est quand le tabl Tableau en C [ par Mickylord ] Bonsoir a tous !Voici ma question :J'ai une fonction principale, main(), et une autre fonction tab(). Je voudrais déclarer un tableau dans la fonction probleme de pointeur [ par jypees ] Bonjour a tous. Voila j'ai l'habitude de faire de la prog sur unix et la je viens de me lancer sur windows (lol) et j'ai un petit probleme car je ne s Probleme pour une boucle en C++ [ par Liquid043 ] De facon simple ce que j'essaie de faire c'est de générer 6 nombre aléatoire compris entre 1 et 49  tout en evitant que dans une série deux numéros se probleme de dll [ par lamoueste ] j'ai un probleme avec ma dll : il s'agit d'une fonction qui doit lance une fenetre (dialog box ) en modal mais j'ai une "assertion failed" :( et je ne


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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 : 6,552 sec (3)

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