Allocation memoire C++ - C++ - Programmation
Marsh Posté le 01-10-2008 à 08:28:56
et non tu fais un new, tu ne perds rien, sauf si tu ne gardes pas un pointeur dessus.
Marsh Posté le 01-10-2008 à 08:45:17
si t est un membre de Test, tu ne perds rien ...
sinon oui hein, std::vector
Marsh Posté le 01-10-2008 à 19:13:31
Merci, oui en effet je me suis rendu compte que ma question etait bete juste apres l avoir pose. Si t est membre je ne perd rien. J avais fait un test mais je devais avoir une autre erreur.
Par contre juste pour confirmer ceci ne marche pas, non:
Code :
|
A la sortie de la methode aloc le bloc est perdu, non?
Merci,
Marsh Posté le 01-10-2008 à 20:06:52
bien sur tu passes ton pointeur par valeur.
Ceci fonctionne :
Code :
|
Marsh Posté le 02-10-2008 à 18:10:47
Merci tu me sors d un flou sur les allocations mémoire. J y vois plus clair maintenant.
Marsh Posté le 03-10-2008 à 21:15:05
par contre après un 'new' il faut un delete à un moment donné sinon il y a fuite mémoire...
hummm et pq std::vector ? j'aime bien la STL mais même dans notre code au taff on a de bon vieux tableaux style char[50] ou int[100] avec des memcopy et memset un peu partout (oui çà peut vous paraitre crade)
Marsh Posté le 04-10-2008 à 00:27:28
Pour les fuites memoires je fais bien attention et je n´ai aucune difficulté avec ca, je te remercie pour ta mise en garde mais dans tout mon code un new pour un delete, du moins en principe
Bien sur , moi aussi j aime bien la stl, et je l´utilise a bon escient, par contre parfois je dois utiliser des donne brut a envoye a la carte graphique. Et puis personnellement j´adore jouer avec les pointeur, c´est pour moi un plus grand plaisir que la stl. Se déplacer dans la mémoire et retrouver les bonnes données.
Ca me donne la nostalgie des bonnes listes chainées en C, c´est un vrai bonheur...
Marsh Posté le 04-10-2008 à 11:11:05
Malkav a écrit :
|
Ouais non mais les mecs, si t'as besoin d'un tableau de taille fixe, fait un tableau de taille fixe :E Rien à redire
Aprés, vector c'ets pour l'aspect dynamqiue. Autre point néanmoins, tu peut pas passer de T[N] proprement par référence.
Donc vector en étant un vrai objet te permet de passer des tableaux par reference. La dessus, si tu as besoin de tableau
statique passable par réf, utilise boost::array<T,N>.
smallGame a écrit : Bien sur , moi aussi j aime bien la stl, et je l´utilise a bon escient, par contre parfois je dois utiliser des donne brut a envoye a la carte graphique. |
Par design, vector est contigu en mémoire et l'adresse de son premier élément est accesible par &v[0]. Et ca sc'ets un bête T* passable à des routines bas niveaux.
Marsh Posté le 04-10-2008 à 18:26:13
Joel F a écrit : |
Je ne suis pas sur de comprendre ce que tu veux dire 1 ou 2:
1- Tous les élément T sont contigus en mémoire??? du genre:
T[0]T[1]T[2]....etc
Dans ce cas la je peux envoyé l'adresse de son premier élément est accesible par &v[0] et il lira tous les éléments...
2- Je pensais que c'était plutot du genre:
ptFirst->T[0]ptNext->T[1]ptNext->...etc
Par contre dans ce cas la ca marche pour un élément mais pas s'il y en a plusieurs;
Désolé pour ma représentation mémoire elle n'est pas top, je ne savais pas comment faire mieux.
1- implique que si vector n'a pas aloué assez d'espace mémoire a l'ajout du neme élément il doit alouer un plus gros bloc, copier tous les éléments qu il possédait dans ce nouveau bloc puis effacer l'ancien bloc mémoire, car il est impossible d'après ma connaissance d'agrandir un bloc mémoire.
En tout cas si ta réponse c'est 1 je trouve ca génial et je l'ignorais...
Marsh Posté le 04-10-2008 à 19:22:41
Reponse 1oui en effet.
De ISO 14882, 2nd ed., 23.2.4 lib.vector:
Citation :
|
Ta représentation 2 c'ets celle de deque et de list en gros.
Marsh Posté le 22-01-2010 à 00:01:12
smallGame a écrit :
1- implique que si vector n'a pas aloué assez d'espace mémoire a l'ajout du neme élément il doit alouer un plus gros bloc, copier tous les éléments qu il possédait dans ce nouveau bloc puis effacer l'ancien bloc mémoire, car il est impossible d'après ma connaissance d'agrandir un bloc mémoire. |
Trés bonne intuition pour un débutant, continue dans cette voie
Marsh Posté le 22-01-2010 à 14:28:22
memspell a écrit : |
2 posts au compteur, un post qui n'apporte rien à part du spam... je pense qu'on se passera de tes services quelques temps
Marsh Posté le 01-10-2008 à 02:42:09
Bonjour a tous,
J ai un problme pour alouer de la memoire dynamiquement, je ne comprend pas comment on fait durant l execution d un programme.
Biensur je n ai forcement aucun probleme si je le fait dans le constructeur:
Par contre il me semble qu on ne peut pas faire:
sinon on perd ce qu on vient d alouer a la fin de la methode, de meme que:
Alors comment fait on pour allouer apres l appel du constructeur? C est forcement possible la STL le fait.
Je vous remercie,
Vincent