IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Variables/objets dynamiques, quelques questions


Sujet :

C++

  1. #1
    Membre confirm� Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Par d�faut Variables/objets dynamiques, quelques questions
    Bonjour � tous,
    Je me pose quelques questions � propos de variables et objets dynamiques (une partie de ces questions aurait peut-�tre du �tre pos�e dans le forum de d�veloppement Windows?!)

    1) Quand je cr�e un objet dynamique avec un new, j'enregistre logiquement l'adresse retourn�e dans un pointeur. Imaginons que je copie cette adresse dans un autre pointeur, si je fais un delete en utilisant cet autre pointeur, supprimerais-je bien la totalit� de la m�moire allou�e (imaginons que j'ai fais un casting et que ce ne soit pas des pointeurs vers le m�me type de variable)?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    int* c = new int;
    long* d = (long*)c;
    delete d;
    2) (En rapport avec la 1) Lorsque je fais un new, y-a-t-il cr�ation d'une sorte de tableau de r�f�rences o� sont enregistr�es pour chaque adresse allou�e la taille de la zone allou�e? (Dont le delete se servirait pour conna�tre la taille � d�sallouer)

    3) Que se passe-t-il si je fais un delete � une adresse qui n'a pas �t� allou�e dynamiquement?

    3bis) Que se passe-t-il si j'ai allou� un tableau (de 10 �l�ments par exemple) et que je fais un delete[] mais comme ceci4) Si j'alloue un tableau dynamique, et que plutot de faire un delete[], je fais simplement delete, que vais-je supprimer? Seulement le premier �l�ment de ce tableau?

    5) Si j'oublie de d�sallouer une zone de m�moire allou�e dynamiquement, lorsque le programme se termine, la zone de m�moire sera automatiquement supprim�e par l'OS (Windows pour ma part)?

    Merci d'avance,
    Crisanar

  2. #2
    Membre �m�rite Avatar de reggae
    Profil pro
    Inscrit en
    Ao�t 2005
    Messages
    773
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 773
    Par d�faut
    Salut!
    2) je pense que oui, il observe l'objet qui se trouve � cet emplacement et suprime les bonnes zones en fonctions de son type(int, double, etc.)
    4) L� aussi j'ai l'impression que oui: l'adresse est celle du premier objet -> seul le premier est d�truit. Quand tu passe un tableau comme arguement c'est seulement l'adresse m�moire du premier objet qui est envoy�e.
    5) Quand tu red�marera la m�moire sera de toute fa�on �cras�e.
    Une d�claration comme

    Utilisera de la m�moire qui sera d�truite une fois sorti de sa port�e. Si tu d�clares des objets dynamiques il occupent la m�moire qusqu'� ce que la m�moire soit �cras�e. Elle j'en suit quasi certain Windows ne fait pas cela
    D�sol� si je n'ai pas r�pondu � tout

  3. #3
    Membre confirm� Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Par d�faut
    Salut reggae ,
    Merci pour tes informations
    Elle j'en suit quasi certain Windows ne fait pas cela
    Que voulais-tu dire, je n'ai pas compris
    D�sol� si je n'ai pas r�pondu � tout
    C'est d�ja pas mal et puis certaines r�ponses r�pondent � plusieures de mes questions

  4. #4
    Membre �m�rite Avatar de reggae
    Profil pro
    Inscrit en
    Ao�t 2005
    Messages
    773
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 773
    Par d�faut
    Vraiment d�sol� je confirme c'est incompr�hensible...
    Je voulais dire que Windows n'�crasait pas les objets alou�s dynamiquement.
    Mais par contre, si Windows ou n'importe quel programme a besoin de plus de m�moire et qu'il n'y en a plus, il y a deux solutions:
    1) il se plante
    2) il affiche un message d'erreur du genre "saturation m�moire" et en cherche � en lib�rer
    Bonne soir�e

  5. #5
    Expert confirm�
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par d�faut
    Mon avis sur ton questionnaire :
    Quand je cr�e un objet dynamique avec un new, j'enregistre logiquement l'adresse retourn�e dans un pointeur. Imaginons que je copie cette adresse dans un autre pointeur, si je fais un delete en utilisant cet autre pointeur, supprimerais-je bien la totalit� de la m�moire allou�e
    Oui. Je pense , sans certitude, que les caract�ristiques de l'allocation sont inscrites par le processus d'allocation.
    Que se passe-t-il si je fais un delete � une adresse qui n'a pas �t� allou�e dynamiquement?
    Ca plante!
    Si j'alloue un tableau dynamique, et que plutot de faire un delete[], je fais simplement delete, que vais-je supprimer? Seulement le premier �l�ment de ce tableau?
    Je ne crois pas qu'on puisse supposer que l'inscription des caract�ristiques de l'allocation par new et par new--- [] soient compatibles. Je pense que dans ce cas, au mieux, le comportement est impr�visible et depend de l'impl�mentation.
    Si j'oublie de d�sallouer une zone de m�moire allou�e dynamiquement, lorsque le programme se termine, la zone de m�moire sera automatiquement supprim�e par l'OS (Windows pour ma part)?
    Tout d�pend de l'OS. Je pense que les versions r�centes de Windows op�rent un nettoyage mais pas les anciennes.
    Mais attendons les r�ponses de personnes plus expertes!

  6. #6
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    1/ Oui
    2/ En g�n�ral, non. Typiquement, les informations du type taille du tableau pour que delete[] puisse fonctionner sont stock�e juste avant l'adresse retourn�e par new. Mais c'est un d�tail d'impl�mentation, pourquoi le savoir ?
    3/ Boom
    3bis/ Boom
    4/ Boom (sur certains compilateurs, seul le premier �l�ment est supprim�, mais rien n'est garanti)
    5/ Ca d�pend de l'OS. Sur un OS digne de ce nom, oui.
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  7. #7
    Membre confirm� Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Par d�faut
    Merci � tous pour vos informations
    2/ En g�n�ral, non. Typiquement, les informations du type taille du tableau pour que delete[] puisse fonctionner sont stock�e juste avant l'adresse retourn�e par new. Mais c'est un d�tail d'impl�mentation, pourquoi le savoir ?
    J'ai toujours consid�r� que c'�tait un plus de conna�tre le fonctionnement interne de certaines fonctions du langage. Et puis je suis d'une curiosit� maladive

  8. #8
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    La m�moire est toujours lib�r�e � la fin du processus, m�me sous DOS (sauf si express�ment demand� par la fonction _dos_keep()

    Par contre, quand il y a des m�moires partag�es, etc., �a peut �tre plus dur (sous Windows, elle disparait quand tous ses handles sont ferm�s, et la fin d'un processus ferme automatiquement ses handles).
    Sous Unixo�de (HP-UX), il y avait un "truc" qui restait apr�s la fin du processus, mais je ne me souviens plus quoi...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Python 3.X] [Pygame] Quelques questions � propos des "objets visuels"
    Par Sugiuro dans le forum Programmation multim�dia/Jeux
    R�ponses: 35
    Dernier message: 14/05/2015, 09h17
  2. D�claration dynamique de variables objets
    Par Anduriel dans le forum Langage
    R�ponses: 7
    Dernier message: 04/08/2013, 15h28
  3. quelques questions sur un Shape cr�� dynamiquement
    Par SmileSoft dans le forum C++Builder
    R�ponses: 10
    Dernier message: 09/07/2010, 21h16
  4. Cr�ation dynamique de variables objet
    Par Oliv- dans le forum Macros et VBA Excel
    R�ponses: 11
    Dernier message: 19/06/2008, 18h17
  5. R�ponses: 9
    Dernier message: 27/12/2006, 13h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo