Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4929 connectés 

  FORUM HardWare.fr
  Programmation
  C

  malloc et piles

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

malloc et piles

n°868572
meumeul
Stay Heavy
Posté le 08-10-2004 à 21:47:19  profilanswer
 

Code :
  1. typedef unsigned int Nat;
  2. typedef struct pile {
  3. Nat* v;
  4. Nat h;
  5. } Pile;
  6. Pile pilenouv() {
  7. Pile p;
  8. p.v = (Nat*) malloc (n * sizeof(Nat)); // MALLOCN(n,Nat);
  9. p.h = 0;
  10. return p;
  11. }
  12. Pile empiler(Pile p, Nat x) {
  13. if (pleine(p)) {
  14.  Nat* nouveauTableau = (Nat*) malloc(((p.h)+n)*sizeof(Nat));
  15.  p.v = (Nat*) memcpy(nouveauTableau, p.v, p.h);
  16. }
  17. p.v[p.h]= x;
  18. p.h++;
  19. return p;
  20. }


Code :
  1. Informations sur la pile :
  2.         Hauteur : 7
  3.         Sommet  : 5
  4.         Contenu : 5 | 3998724 | 1096575332 | 1768714352 | 1769234787 | 0 | 6
  5. Fin des informations.


 
alors que toues les chiffres que j'ai empilé sont en dessous de 10.
Je suppose que c mes mallocs qui font nimporte quoi,
mais je comprend pas pkoi.
 
une idée ?

mood
Publicité
Posté le 08-10-2004 à 21:47:19  profilanswer
 

n°868576
meumeul
Stay Heavy
Posté le 08-10-2004 à 21:49:07  profilanswer
 

 
En fait, quand y'a plus assez de place dans la pile, je ralloue un  
tableau plus grand dans ma pile. je copie l'ancien avec memcopy,
et la certains des chiffres deviennent fous !
Sinon tous les reste marche. compren pa...


Message édité par meumeul le 08-10-2004 à 21:49:36
n°868579
Taz
bisounours-codeur
Posté le 08-10-2004 à 21:51:25  profilanswer
 

p.v = (Nat*) malloc (n * sizeof(Nat));
 
pas besoin de cast
 
du reste tout ça c'est bien mais c'est quoi n ?
 
 
memcpy(nouveauTableau, p.v, p.h);
-> memcpy(dest, source, quantité)
 
quantité est exprimé en 'char'
 
donc ce n'est pas 'p.h', mais 'p.h * sizeof(Nat)'
 
voir 'p.h * sizeof *p.v' si tu veux faire propre

n°868580
cris56
Posté le 08-10-2004 à 21:51:56  profilanswer
 

oula ca fuis tout ca,
 
et utilise realloc qui gere ca a ta place
 
ne cast pas inutiliment memcpy et malloc et ca sort d'ou n dans pilenouv  ?

n°868581
meumeul
Stay Heavy
Posté le 08-10-2004 à 21:52:17  profilanswer
 

"n" c'est un define qui vaut 5

n°868584
cris56
Posté le 08-10-2004 à 21:54:26  profilanswer
 

ta pas trouvé mieux (et surtout plus unique) comme nom pour ta macros ?

n°868585
meumeul
Stay Heavy
Posté le 08-10-2004 à 21:54:54  profilanswer
 

Taz a écrit :


donc ce n'est pas 'p.h', mais 'p.h * sizeof(Nat)'
voir 'p.h * sizeof *p.v' si tu veux faire propre


 
merci d'avoir répondu si vite, et qui plus est,
correctement !
ca marche nickel.
Merci :)


Message édité par meumeul le 08-10-2004 à 21:55:25
n°868587
meumeul
Stay Heavy
Posté le 08-10-2004 à 21:56:18  profilanswer
 

cris56 a écrit :

ta pas trouvé mieux (et surtout plus unique) comme nom pour ta macros ?


 
bah c le prof qui veut ses trucs a lui.
Je sais, c débile, genre vo mieux un truc du genre TAILLE_BUFFER
ou je ne sais quoi.
Je suis les ordres, c'est tout :)

n°868588
meumeul
Stay Heavy
Posté le 08-10-2004 à 21:56:53  profilanswer
 

c grave de caster inutilement ?

n°868589
cris56
Posté le 08-10-2004 à 21:57:46  profilanswer
 

oui, surtout si tu oubli les entetes necessaire

mood
Publicité
Posté le 08-10-2004 à 21:57:46  profilanswer
 

n°868590
Taz
bisounours-codeur
Posté le 08-10-2004 à 21:58:05  profilanswer
 

oui, mais surtout ça sert à rien, sauf à rendre illisible une opération de routine comme un malloc ou un memcpy

n°868591
meumeul
Stay Heavy
Posté le 08-10-2004 à 21:58:53  profilanswer
 

Oki ben merci à tous les deux. Je débute :)

n°868592
cris56
Posté le 08-10-2004 à 22:04:27  profilanswer
 

il manque  toujours un free dans empiler
 
memcpy(nouveauTableau , ... );
free( p.v );
p.v = nouveauTableau ;

n°868594
Taz
bisounours-codeur
Posté le 08-10-2004 à 22:06:41  profilanswer
 

un petit realloc ça serait sympa

n°868708
meumeul
Stay Heavy
Posté le 08-10-2004 à 23:27:59  profilanswer
 

cris56 a écrit :

il manque  toujours un free dans empiler
 
memcpy(nouveauTableau , ... );
free( p.v );
p.v = nouveauTableau ;


 
Je pensais que si rien ne pointait sur une zone,
yavait comme un garbage collector quil le libere tout seul.
Pas en C alors ?
 
edit: taz > c'est clair, realloc, c'est bien plus beau.


Message édité par meumeul le 08-10-2004 à 23:28:56
n°868709
Taz
bisounours-codeur
Posté le 08-10-2004 à 23:28:37  profilanswer
 

surtout pas en C !

n°868711
Taz
bisounours-codeur
Posté le 08-10-2004 à 23:29:01  profilanswer
 

je crois que tu ferais bien te renseigner sur l'histoire du C et sur pourquoi le C a été conçu.

n°868712
meumeul
Stay Heavy
Posté le 08-10-2004 à 23:29:22  profilanswer
 

Taz a écrit :

surtout pas en C !


lol autant pour moi alors.
merci

n°868721
masklinn
í dag viðrar vel til loftárása
Posté le 08-10-2004 à 23:36:16  profilanswer
 

j'ai un peu de mal a comprendre: pourquoi tu n'alloues pas dynamiquement un espace mémoire à chaque empilage? (et désalloue au dépilage)
 
en fait c'est pas une pile que tu fais là, c'est juste un tableau :heink:


Message édité par masklinn le 08-10-2004 à 23:37:16

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°868724
Taz
bisounours-codeur
Posté le 08-10-2004 à 23:37:08  profilanswer
 

pour justement ne pas avoir à le faire à chaque fois.

n°868726
masklinn
í dag viðrar vel til loftárása
Posté le 08-10-2004 à 23:37:35  profilanswer
 

Taz a écrit :

pour justement ne pas avoir à le faire à chaque fois.


Oui mais c'est pas une pile [:spamafote]
 
-> meumeul
tu peux aussi remplacer
 p.v[p.h]= x;
 p.h++;
 
par p.v[p.h++] = x;
 
Ah oui et comment il détermine que la pile est pleine après le 1er resize?


Message édité par masklinn le 08-10-2004 à 23:40:39

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°868731
Taz
bisounours-codeur
Posté le 08-10-2004 à 23:39:03  profilanswer
 

je vois pas le rapport...

n°868733
Taz
bisounours-codeur
Posté le 08-10-2004 à 23:39:54  profilanswer
 

Masklinn a écrit :


 
-> meumeul
tu peux aussi remplacer
 p.v[p.h]= x;
 p.h++;
 
par p.v[p.h++] = x;

aucun intérêt sauf dégrader la lisibilité, déjà mauvaise avec des membres '.v' et '.h'

n°868737
cris56
Posté le 08-10-2004 à 23:42:34  profilanswer
 

et h doit etre un size_t

n°868738
masklinn
í dag viðrar vel til loftárása
Posté le 08-10-2004 à 23:43:43  profilanswer
 

Taz a écrit :

aucun intérêt sauf dégrader la lisibilité, déjà mauvaise avec des membres '.v' et '.h'


pas faux [:figti]  
mauvais point donc
 
mais il me reste le (gros) problème de déterminer si la pile est pleine (vu qu'il ne conserve pas la taille allouée de la pile [:fande--] )
et le fait que ca soit pas géré comme une pile FILO (je présumme que c'est ce à quoi il veut arriver, parce qu'une FIFO avec son implémentation actuelle [:fande--] )


Message édité par masklinn le 08-10-2004 à 23:44:46

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°868745
cris56
Posté le 08-10-2004 à 23:50:51  profilanswer
 

ben non, h est le curseur
 
c'est une pile, et fifo tu peux appeler ca file

n°868751
masklinn
í dag viðrar vel til loftárása
Posté le 08-10-2004 à 23:59:27  profilanswer
 

cris56 a écrit :

ben non, h est le curseur


mouais

Citation :

c'est une pile, et fifo tu peux appeler ca file


 :??:  


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°868753
cris56
Posté le 09-10-2004 à 00:00:52  profilanswer
 

ya stack et queue

n°868757
Taz
bisounours-codeur
Posté le 09-10-2004 à 00:02:54  profilanswer
 

il manque effectivement un membre capacité

n°868772
masklinn
í dag viðrar vel til loftárása
Posté le 09-10-2004 à 00:16:19  profilanswer
 

Citation :

stack et queue


stack = FILO
queue = FIFO
 
non?


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°868777
cris56
Posté le 09-10-2004 à 00:18:21  profilanswer
 

oui

n°868778
masklinn
í dag viðrar vel til loftárása
Posté le 09-10-2004 à 00:19:21  profilanswer
 


bon, donc autant utiliser les termes consacrés pour une pile, qui sont fifo et filo, non?


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°868781
Taz
bisounours-codeur
Posté le 09-10-2004 à 00:23:44  profilanswer
 

en français, c'est Pile et File et tout le monde le comprends

n°868783
cris56
Posté le 09-10-2004 à 00:24:51  profilanswer
 

c'est ce que j'avais dit au debut, ca semblais pas etre compris ??

n°868787
masklinn
í dag viðrar vel til loftárása
Posté le 09-10-2004 à 00:31:03  profilanswer
 

Taz a écrit :

en français, c'est Pile et File et tout le monde le comprends


mais ca veut rien dire [:spamafote]  
ca découle de comparaisons avec des éléments de vie, alors que les termes originaux sont les acronymes décrivant le comportement de la pile [:spamafote]
 
enfin bon laissez tomber je viens de me rendre compte que je fais des mélanges francais anglais sans même le réaliser :cry:  
 
j'vais me tirer une balle, redémarrer mon PC, réinstaller mon imprimante et je reviens :hello:


Message édité par masklinn le 09-10-2004 à 00:32:34

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°868789
cris56
Posté le 09-10-2004 à 00:35:12  profilanswer
 

ca veut tout dire au contraire, tu vois tout de suite quel genre de probleme tu va pouvoir modeliser

n°868795
masklinn
í dag viðrar vel til loftárása
Posté le 09-10-2004 à 01:04:11  profilanswer
 

cris56 a écrit :

ca veut tout dire au contraire, tu vois tout de suite quel genre de probleme tu va pouvoir modeliser


pour moi, pas plus qu'en utilisant les termes fifo/lifo [:spamafote]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°868850
Sve@r
Posté le 09-10-2004 à 09:50:41  profilanswer
 

meumeul a écrit :

Code :
  1. typedef unsigned int Nat;
  2. typedef struct pile {
  3. Nat* v;
  4. Nat h;
  5. } Pile;
  6. Pile pilenouv() {
  7. Pile p;
  8. p.v = (Nat*) malloc (n * sizeof(Nat)); // MALLOCN(n,Nat);
  9. p.h = 0;
  10. return p;
  11. }




 
Hum... est-ce bien judicieux de faire "return" d'une structure ? Si tous les octets de la structure sont renvoyés par copie cela risque d'être bien long.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°868852
Lam's
Profil: bas.
Posté le 09-10-2004 à 09:59:47  profilanswer
 

Sve@r a écrit :

Hum... est-ce bien judicieux de faire "return" d'une structure ? Si tous les octets de la structure sont renvoyés par copie cela risque d'être bien long.


Nan, c'est bon. Sa structure ne contient qu'un pointeur et un entier, c'est pas très gourmand...

n°868855
meumeul
Stay Heavy
Posté le 09-10-2004 à 10:12:46  profilanswer
 

je sais que c pas une "vraie" pile, c juste l'implentation
que le prof veut. Je la trouve bien pourri, mais bon :)
Apres on doit faire une pile chainée, ca sera biiien mieux.
Mais pas le choix, je devais faire comme ca.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  malloc et piles

 

Sujets relatifs
Fonction et malloc localPourquoi caster un malloc
[c] malloc qui deconnemalloc, free et structures
malloc qui n'alloue pas le bon nombre d'octet...Pb de malloc : ça marche , mais ça marche pas ... :-(
sujet: pb de malloc? malloc(strlen(getpwuid(uid)->p w_name)) ? c mal ?[C++] Malloc et Free ... truc que je pige pas
[C/C++] Malloc et occupation mémoire sous Win2000malloc()
Plus de sujets relatifs à : malloc et piles


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)