passage de matrice en parametre

passage de matrice en parametre - C - Programmation

Marsh Posté le 20-01-2007 à 21:20:35    

Salu,  
 
j'ai une matrice 1000x1000 et je souhaite la remplir dans l'appel d'une fonction :
 

Code :
  1. int main()
  2. {
  3.    int matrice[1200][1200];
  4.   fonction(matrice);
  5. }
  6. fonction(int ** mat)
  7. {
  8. //remplissage de la matrice
  9. }


 
Et bien sûr, gcc me dit qu'il y un conflit de type.
 
une idée de ce qu'il faut faire?
merci

Reply

Marsh Posté le 20-01-2007 à 21:20:35   

Reply

Marsh Posté le 20-01-2007 à 21:53:54    

bigears a écrit :

j'ai une matrice 1000x1000...

Code :
  1. ...
  2.    int matrice[1200][1200];
  3. ...




Déjà si t'étais cohérent entre la description de ton pb et ce que t'as écrit dans ton code...
 

bigears a écrit :

Et bien sûr


Donc tu sais déjà qu'il y aura une erreur...
 

bigears a écrit :

gcc me dit qu'il y un conflit de type.
une idée de ce qu'il faut faire?


Oui: aller ici http://forum.hardware.fr/hfr/Progr [...] 0049_1.htm et lire mon post du 9 janvier dernier...


Message édité par Sve@r le 20-01-2007 à 21:57:18

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 20-01-2007 à 22:06:13    

nikel, c'est ce qu'il me fallait.
merci

Reply

Marsh Posté le 20-01-2007 à 23:28:22    

bigears a écrit :

j'ai une matrice 1000x1000 et je souhaite la remplir dans l'appel d'une fonction :

Code :
  1. int main()
  2. {
  3.    int matrice[1200][1200];




Alors c'est 1000 ou 1200 ? De toutes façon, c'est trop gros pour être une variable locale. Je recommande 'static'.

Code :
  1. static int matrice[1200][1200];


Citation :


Code :
  1. fonction(int ** mat)


Et bien sûr, gcc me dit qu'il y un conflit de type.


Ben oui...

 

http://mapage.noos.fr/emdel/notes.htm#param_tab

 

Il n'est pas inutile de relire son livre de C de temps en temps...


Message édité par Emmanuel Delahaye le 21-01-2007 à 12:12:29

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 21-01-2007 à 02:23:54    

bigears a écrit :

Salu,

 

j'ai une matrice 1000x1000 et je souhaite la remplir dans l'appel d'une fonction :

 
Code :
  1. int main()
  2. {
  3.    int matrice[1200][1200];
  4.   fonction(matrice);
  5. }




livrons nous à un petit calcul...
une matrice de 1200*1200 contient donc 1 440 000 éléments
sachant qu'un élément tient sur 4 octets (on va dire ça, même si ce n'est pas toujours vrai), ça nous fait une occupation mémoire de 5 760 000 octets, soit 5 760 000 / 1024 = 5 625 Ko, soit 5.493 Mo !!!
t'as pas peur des stack overflows toi [:pingouino]

 

edit: [:benou_grilled]

Message cité 2 fois
Message édité par Harkonnen le 21-01-2007 à 02:25:17
Reply

Marsh Posté le 21-01-2007 à 14:47:09    

Harkonnen a écrit :

... = 5 625 Ko, soit 5.493 Mo !!!


Hé oui, seuls les vendeurs de disques durs croient (ou font semblant de croire) que 1Mo = 1000 ko alors que tout le monde (sauf eux) sait bien qu'il n'en est rien !!!
 


Oui, de 3h !!! On peut pas dire que tu sois un rapide du clavier toi [:ddr555]


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 21-01-2007 à 16:04:01    

Harkonnen a écrit :


t'as pas peur des stack overflows toi [:pingouino]
 
edit: [:benou_grilled]


 
en fait le but du programme, c'est de comparer l'efficacité de différentes méthodes d'interpolation .
 
Donc en gros, si le compilo arrive a m'allouer les 1200x1200 int tant mieux, sinon je trouverai une autre solution.(A priori, ca passe )
Petite question subsidiaire :D : Est-il possible d'allouer un tableau 2D dans le tas, et d'y avoir un accès grace a l'operatreur[][] ?
 
(oui oui je sais j'ai quelques lacunes avec la memoire......^^)

Reply

Marsh Posté le 21-01-2007 à 17:10:05    

bigears a écrit :

Est-il possible d'allouer un tableau 2D dans le tas, et d'y avoir un accès grace a l'operatreur[][] ?
 
(oui oui je sais j'ai quelques lacunes avec la memoire......^^)


Oui.
 
http://mapage.noos.fr/emdel/notes.htm#tabdyn_2d
 
Mais comme je te l'ai dit, pour du quick'n dirty, static, ça passe. (pas en MS-DOS, bien sûr...)


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed