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

  FORUM HardWare.fr
  Programmation
  C++

  C++ : Effacer une zone mémoire à une adresse donnée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C++ : Effacer une zone mémoire à une adresse donnée

n°1037631
Sagoth
:|
Posté le 06-04-2005 à 16:00:20  profilanswer
 

Bonjour.
 
J'ai un problème concernant une zone mémoire en C++
 
J'ai un objet A de type tA.
 
j'enregistre l'adresse de cet objet dans une variable B  (un int).
 
L'objet A est mis a NULL mais non effacé de la mémoire (oui, c'est étrange mais je ne peux pas faire autrement dans mon cas de figure)
 
Du coup j'aurais aimé pouvoir effacer   les données restantes de mon objet A qui sont à l'adresse enregistrée dans B.
 
Est ce possible ?  
 
J'imagine une commande de type "delete", mais je ne parvient pas a indiquer au programme "efface à l'adresse contenue dans la valeur B"
 
 
PS : je reprécise bien que je ne veux pas effacer l'objet A directemet.
Je veux bien enregistrer son adresse et l'effacer ensuite apres d'autres traitement.
 
 

mood
Publicité
Posté le 06-04-2005 à 16:00:20  profilanswer
 

n°1037727
moi23372
Posté le 06-04-2005 à 16:40:17  profilanswer
 

en c++ pour faire l'allocation et la désallocation c'est comme ça:
 
ex:
 
pour allouer:
int *nombre = new int();
 
pour désallouer:
delete nombre;

n°1037731
tuxbleu
renie ses origines
Posté le 06-04-2005 à 16:43:37  profilanswer
 

je n'ai que de "vieux" souvenir de C/C++, mais un truc style :
 
for (i=0; i< sizeof(tA) ; i++) {
  *B++ = null;
}
 
ca marcherais pas ?
 
Remarque, j'ai toujours été nul en C ...


Message édité par tuxbleu le 06-04-2005 à 16:44:42
n°1037747
belgique
Posté le 06-04-2005 à 16:51:24  profilanswer
 

ta * nouveaupointeur= (ta*) b;
delete nouveaupointeu;
:??:

n°1037895
Sagoth
:|
Posté le 06-04-2005 à 18:20:50  profilanswer
 

moi23372 Oui je sais, mon problème est différent.
tuxbleu Non, NULL ne signifie pas que l'on desalloue
belgique Je vais essayer mais j'ai bien peur qu'à ce moment là j'efface seulement la recopie.
 
C'est plus compliqué que cela en à l'air non ?

n°1037904
HelloWorld
Salut tout le monde!
Posté le 06-04-2005 à 18:25:26  profilanswer
 

Sagoth a écrit :

Bonjour.
 
J'ai un problème concernant une zone mémoire en C++
 
J'ai un objet A de type tA.
 
j'enregistre l'adresse de cet objet dans une variable B  (un int).
 
L'objet A est mis a NULL mais non effacé de la mémoire (oui, c'est étrange mais je ne peux pas faire autrement dans mon cas de figure)


 
même pas utiliser un pointeur intelligent ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1037909
xterminhat​e
Si vis pacem, para bellum.
Posté le 06-04-2005 à 18:28:52  profilanswer
 

Ca veut dire quoi mis à NULL ?
 
Sinon, pour effacer la mémoire, je vois un truc du genre : fill( B, B+sizeof(ta), 0 ).

n°1037911
belgique
Posté le 06-04-2005 à 18:29:46  profilanswer
 

Sagoth a écrit :

moi23372 Oui je sais, mon problème est différent.
tuxbleu Non, NULL ne signifie pas que l'on desalloue
belgique Je vais essayer mais j'ai bien peur qu'à ce moment là j'efface seulement la recopie.
 
C'est plus compliqué que cela en à l'air non ?


 
Quelle copie? qui a copié quoi que ce soit?

n°1037912
xterminhat​e
Si vis pacem, para bellum.
Posté le 06-04-2005 à 18:29:53  profilanswer
 

J'ai l'impression que tu souhaites desallouer un objet A qui n'est pas alloué dynamiquement... ton explication n'est pas claire.

n°1038448
Sagoth
:|
Posté le 07-04-2005 à 09:26:16  profilanswer
 

xterminhate a écrit :

J'ai l'impression que tu souhaites desallouer un objet A qui n'est pas alloué dynamiquement... ton explication n'est pas claire.


 
Oui, désolé, j'ai un peu de mal à l'expliquer. Je vais préciser.
 
A est bien alloué dynamiquement.
 
Le problème est qu'à un certain moment j'effectue un delete sur un autre objet (disons A-PERE) contenant mon objet A.
Ce qui se passe alors c'est que A n'est pas désaloué.
 
De plus A est alloué plusieurs fois avant le delete de A-PERE, et je ne  dois pas "deleter" le premier de ces objet A tant que A-PERE existe.
 
Bon, je suis désolé, c'est un gros merdier et si j'avais pu éviter ces bidouilles à 2 kopek je l'aurais fait ;)
 
Je vais essayer de me demmerder :)
 
PS : peut etre que ta solution fonctionne Belgique en fait, je vais creuser

mood
Publicité
Posté le 07-04-2005 à 09:26:16  profilanswer
 

n°1038459
IrmatDen
Posté le 07-04-2005 à 09:36:08  profilanswer
 

Et le supprimer dans le destructeur de A-PERE c'est possible ?

n°1038524
bjone
Insert booze to continue
Posté le 07-04-2005 à 10:35:14  profilanswer
 

poste tes classes et du code.

n°1038538
CMk
Posté le 07-04-2005 à 10:41:08  profilanswer
 

xterminhate a écrit :

Ca veut dire quoi mis à NULL ?


T'as variable ne vaut rien, elle est vide (elle ne vaut surtout pas 0). Par contre, elle prends le  même espace mémoire. (dites le moi si je dit nimp :p )

n°1038587
HelloWorld
Salut tout le monde!
Posté le 07-04-2005 à 11:04:20  profilanswer
 

Je repose ma question : un pointeur intelligent ne résoudrait-il pas proprement et de manière fiable ton problème ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1038768
LordHarryP​otter
Posté le 07-04-2005 à 13:08:46  profilanswer
 

Sagoth : si je comprend bien ton problème est que plusieurs objet font référence à A et donc quand tu supprime un objet qui faitréférence à A tu ne veut pas le supprimer à moins que ce soit le dernier y faisant référence ?
 
Tu pourrais mettre dans A un entier qui indique le nombre d'objet référençant celui-ci et à chaque appel des destructeurs des objets pointant sur A tu décrémente cet entier, et pdt les constructeur t'incrémente.
 
CMk, xterminhat  : NULL est la valeur que l'on assigne à un pointeur pour dire qu'il ne pointe sur rien (interdiction de faire delete NULL) etsinon le pointeur NULL à pour valeur booléenne false :  
if (my_ptr)
delete my_ptr ;

n°1038776
bjone
Insert booze to continue
Posté le 07-04-2005 à 13:12:50  profilanswer
 

delete NULL est légal.

n°1039027
Sagoth
:|
Posté le 07-04-2005 à 16:16:21  profilanswer
 

Oui, bien sur il y aurait moyen de programmer un truc bien plus propre.
 
Le problème est que je dois seulement mettre à jour ce soft, qui à la base n'avais pas été concu pour gérer plusieurs objets (en l'occurence des instances de classes images propriétaires) à la fois mais un seul.
 
Sachant que je dois garder une compatibilité avec l'existant, je me retrouve avec un merdier sans nom.
 
Sinon pour résumer, en gros je voulais supprimer l'ancienne allocation d'objets qui ont été réalloués entre temps; objets qui bien entendu (se serait trop simple) ne peuvent être "deleted" avant cette réallocation et qui restent donc en mémoire.
 
Bref, c'est je pense une voie de garage, je vais essayer d'attaquer le pb par un autre coté.
 
En tout cas merci pour vos remarques et suggestions !
 
 
 

n°1039142
bjone
Insert booze to continue
Posté le 07-04-2005 à 17:06:49  profilanswer
 

donc on aura jamais un petit extrait de tes classes ou du code ?

n°1039178
HelloWorld
Salut tout le monde!
Posté le 07-04-2005 à 17:31:49  profilanswer
 

LordHarryPotter a écrit :

Tu pourrais mettre dans A un entier qui indique le nombre d'objet référençant celui-ci et à chaque appel des destructeurs des objets pointant sur A tu décrémente cet entier, et pdt les constructeur t'incrémente.


 
Ah oui, une sorte de... pointeur intelligent
http://www.boost.org/libs/smart_ptr/shared_ptr.htm
 
:sarcastic:  


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1039273
LordHarryP​otter
Posté le 07-04-2005 à 19:06:54  profilanswer
 

HelloWorld a écrit :

Ah oui, une sorte de... pointeur intelligent
http://www.boost.org/libs/smart_ptr/shared_ptr.htm
 
:sarcastic:


 Je sens uhe dose de "mais çà fait 100 ans je vous le dis"  :kaola:

n°1039277
HelloWorld
Salut tout le monde!
Posté le 07-04-2005 à 19:23:38  profilanswer
 

T'es un vrai petit devin toi, tu portes pas ce pseudo par hasard ;)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1039535
xterminhat​e
Si vis pacem, para bellum.
Posté le 07-04-2005 à 23:19:42  profilanswer
 

LordHarryPotter a écrit :

CMk, xterminhat  : NULL est la valeur que l'on assigne à un pointeur pour dire qu'il ne pointe sur rien (interdiction de faire delete NULL) etsinon le pointeur NULL à pour valeur booléenne false :  
if (my_ptr)
delete my_ptr ;


Si tu relis bien ce qui est dit : "L'objet A est mis à NULL [...]". Il ne parlait pas d'un pointeur sur A, d'où ma quetion.
 
Cela dit, ton bout de code.... hum, t'es pas sérieux quand même. On prefera 0 à la place de NULL en C++. Et delete 0 n'a jamais fait de mal a personne.

n°1039635
Sagoth
:|
Posté le 08-04-2005 à 08:45:45  profilanswer
 

Désolé pour le code, mais je travaille dessus seulement, il ne "m'appartient" pas.

mood
Publicité
Posté le   profilanswer
 


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

  C++ : Effacer une zone mémoire à une adresse donnée

 

Sujets relatifs
STL et libération mémoireProbleme sur javascript adresse ip en
ACCESS : zone de liste déroulante : ne plus pouvoir écrire ?quelle est l'adresse du serveur MYSQL OVH
Récupération adresse IP : légal ou pas?Garder en mémoire des donnes dans une boite de dialogue IMPORTANT
Insérer donnée dans usfComment modifier une variable passé en argument de fct par son adresse
Extraire donnée d'un recordsetexportation du contenu d'une base de donnée vers xml avec java
Plus de sujets relatifs à : C++ : Effacer une zone mémoire à une adresse donnée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR