|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre éclairé
![]() ![]() Caissier Inscription : décembre 2012 Messages : 219 ![]() |
Bonjours à tous, je suis sur la construction d'un petit moteur 2d et je n'arrive pas à savoir si la mémoire allouée est bien vidée, pouvez vous me l'affirmer ou me corriger si possible, merci ! (tableau 2 dimensions de type char)
Code :
|
||
|
|
00
|
|
|
#2 | |||
|
Membre éprouvé
![]() Étudiant Inscription : juin 2012 Messages : 272 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() ![]() Caissier Inscription : décembre 2012 Messages : 219 ![]() |
Les "height" sont créés à partir des "width", pour l'effacement je ne dois pas en premier supprimer les "height" ? Je risque de perdre les pointeurs non ?
|
|
|
00
|
|
|
#4 |
![]() ![]() Cyrille Network programmer Inscription : juin 2010 Messages : 1 570 ![]() |
Bonjour,
La règle est simple, il faut autant de delete que de new. Tu as 1 + width new, et height + 1 delete -> problème. |
|
|
00
|
|
|
#5 | ||
|
Membre éclairé
![]() ![]() Caissier Inscription : décembre 2012 Messages : 219 ![]() |
Celui ci est sans doute plus vrai !
Code :
|
||
|
|
00
|
|
|
#6 | ||||||||
![]() ![]() |
Salut,
Ceci dit, si tu dois réellement avoir un tableau deux dimensions "plein" (dans le sens où toutes les "cases" sont utilisées), il est souvent utile et préférable de travailler d'une manière alternative: Si tu y réfléchis trente secondes, en demandant d'avoir un tableau de nLines lignes et de nCols colonnes, tu espères, tout simplement, obtenir un tableau de nLines * nCols éléments. En travaillant comme tu le fais, tu te places dans une situation dans laquelle :
Par la suite, lorsque tu voudras accéder à l'élément se trouvant à la ligne X et à la colonne Y, il te suffira d'accéder à l'élément (X * nCols) + y Tu aurais donc un code proche de Code :
Code :
Il reste un détail à régler, car on n'y a pas encore fait allusion dans cette discussion... Pour l'instant, tu es en mesure d'éviter les fuites mémoire lors d'une utilisation "simple" du genre de Code :
Code :
Je vais te laisser réfléchir un tout petit peu à la question et, au besoin, l'expérimenter Une chose est sur, tu te trouveras confronté à un problème qu'il faudra prendre en compte
__________________
en bas de page
|
||||||||
|
|
10
|
|
|
#7 | ||||||
|
Membre éclairé
![]() ![]() Caissier Inscription : décembre 2012 Messages : 219 ![]() |
Merci tout d’abord pour le temps que tu m'accordes. Je suis sur ce programme depuis mes début en programmation(1an environ) Je suis à un moment donné effectivement passé par quad[largeur * hauteur]. Ce "Quad" peut être d'une valeur importante (1000 / 1000) (si c'est important...
Pour envoyer mes Classe de tableau je n'utilise que des références: Code :
.h Code :
Code :
|
||||||
|
|
00
|
|
|
#8 | |||||||||||
![]() ![]() |
Citation:
Code :
Code :
Mais le problème reste néanmoins complet, et tu n'as pas répondu à la question sous-jacente : que se passera-t-il, selon toi, si tu te trouves dans une situation où, que ce soit volontairement ou non, tu effectue une copie ou une affectation de ta classe Quad Et cette question en amène une autre : Est-il simplement opportun d'accepter la copie et / ou l'affectation de ta classe Pour te mettre sur la voie de la deuxième question, tu devrais réfléchir à la sémantique de ta classe Quad (je ne connais pas assez ton projet pour y donner une réponse Par contre, si ta classe a sémantique de valeur, tu devrais redéfinir le constructeur par copie et l'opérateur d'affectation. Mais, avant d'en arriver à t'expliquer le pourquoi, j'aimerais te laisser une chance de le comprendre par toi meme
__________________
en bas de page
|
|||||||||||
|
|
00
|
|
|
#9 | ||||
|
Membre éclairé
![]() ![]() Caissier Inscription : décembre 2012 Messages : 219 ![]() |
Et moi qui commençais à croire que je commençais à comprendre....
J'ai en effet, merci, découvert le "pattern singletone" ! Je dois avouer que ça aide pas mal a construire tout ça ! .h Code :
Code :
Et on repart du début ! (mais mieux, ...si je ne me suis pas planté) Merci ! |
||||
|
|
00
|
|
|
#10 |
![]() ![]() |
Deux choses :
Le constructeur et le destructeurs se doivent d'être publiques, autrement, tu n'auras aucun moyen de créer des variables du type Quad. Ensuite, le pattern singleton , c'est autre chose : il s'agit d'une classe dont on est sur qu'il n'existera jamais qu'une et une seule instance durant toute l'exécution du programme. C'est d'ailleurs un pattern fort décrié (à raison selon moi) car il a pour conséquence la création d'une variable globale, meme si elle le cache bien (or, les variables globales, c'est mal
__________________
en bas de page
|
|
|
00
|
|
|
#11 | ||||
|
Membre éclairé
![]() ![]() Caissier Inscription : décembre 2012 Messages : 219 ![]() |
Pardon, celle ci :
Code :
Citation:
Je ne travail qu'avec des classes, peut être que là est le problème?! Citation:
|
||||
|
|
00
|
|
|
#12 | ||||
![]() ![]() |
Citation:
Une classe a sémantique de valeur s'il est possible de trouver deux instances différentes de cette classe en mémoire présentant exactement les même valeurs et pouvant être considérées comme identique (par exemple : une couleur, un point, ...) Ces classes sont, généralement, copiables, assignables, comparables par égalité (parfois par inégalité), constantes (la modification d'une des valeurs qui les composent occasionne l'obtention... d'une nouvelle instance de cette classe) et ne sont pas adaptées à un héritage. Une classe a sémantique d'entité si tu ne peux pas avoir deux instances différentes de cette classe en mémoire présentant exactement les même valeurs car certaines des valeurs utilisées permettent d'identifier chaque instance de manière unique et non ambigue (par exemple : un compte bancaire, une personne, ...). Ces classes ne sont pas copiables ni assignables, disposent de comportements susceptibles d'en modifier certains états, et sont généralement susceptibles d'être héritée (dans les limites du LSP, évidemment Pour éviter qu'une classe soit copiable ou assignable, il faut:
)Le fait que tu ne travailles qu'avec des classes ne changera rien à la sémantique donnée à chacune d'elle, si ce n'est que toute classe manipulant en interne une instance de classe ayant sémantique d'entité aura, fatalement, sémantique d'entité elle aussi Citation:
Généralement, une classe qui devra être utilisée "n'importe où dans le code" est souvent le symptôme du fait que tu auras très mal séparé les différents problèmes les uns des autres et que tu as, sans doute, très mal séparé les différentes responsabilités Mais, si tu as l'impression de "tourner en rond", il est peut etre utile de repenser un peu à ta conception de base Généralement, ce que je fais lorsque je dois concevoir quelque chose, c'est de commencer par exprimer (en français courent) clairement les différents besoins auxquels je suis confrontés. Chaque fois que je me trouve face à un terme qui mérite d'être expliqué, je l'explique spécifiquement. Une fois que j'ai effectué ce travail, je pars du principe que chaque nom que je rencontre dans l'expression de mes besoins correspond à un type qu'il me faudra créer et que chaque verbe que je rencontre correspond à un comportement qu'il faudra implémenter, que ce soit sous la forme d'une fonction membre ou d'une fonction libre. A partir de là, il devient *relativement* facile de se faire une idées des différentes relations qui existent entre les différents types que je vais devoir créer Bien sur, comme les besoins évoluent en permanences, il est souvent utile de repasser par cette étape d'expression claire et précise des nouveaux besoins, voire, de choses auxquelles on n'avait pas forcément pensé lors de l'itération précédente J'ai récemment développé cette manière de travailler lors d'une de mes interventions. Evidemment, mon développement se basait sur une problème particulier (le concept de pile), mais il devrait pouvoir te donner une idée de la manière dont j'ai travaillé et donc te permettre de faire de même pour ton projet
__________________
en bas de page
|
||||
|
|
10
|
|
|
#13 | |
|
Membre éprouvé
![]() Étudiant Inscription : juin 2012 Messages : 272 ![]() |
Citation:
|
|
|
|
00
|
|
|
#14 |
![]() ![]() |
__________________
en bas de page
|
|
|
00
|
|
|
#15 |
|
Membre éclairé
![]() ![]() Caissier Inscription : décembre 2012 Messages : 219 ![]() |
Énorme prise de conscience ! Le ciel éclaircie, les oiseaux chantes ! >> DEUX types d’objets distincts pour construire un programme bien stable !
Je vois maintenant bien la différence entre "sémantique de valeurs et d’entités". Par ces contraintes, la construction en ai toute chamboulée ! Je suis repartis sur un nouveau programme bien plus simple histoire d'entrainement, y'a pas à dire, ça a d'la gueule ! Merci énormément de m'avoir remis sur un meilleur chemin, merci encore! |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com