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 :

Explorer l'allocation dynamique de mémoire avec des pointeurs en C++


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Developer
    Inscrit en
    Janvier 2023
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Developer
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2023
    Messages : 15
    Points : 23
    Points
    23
    Par défaut Explorer l'allocation dynamique de mémoire avec des pointeurs en C++
    Chers passionnés de C++,

    L'allocation dynamique de mémoire joue un rôle crucial dans la programmation C++, permettant aux développeurs d'allouer dynamiquement de la mémoire au moment de l'exécution et de gérer efficacement les ressources mémoire. Cependant, maîtriser l’allocation dynamique de mémoire avec des pointeurs en C++ nécessite une solide compréhension de la gestion de la mémoire, de la durée de vie des pointeurs et des techniques de désallocation de mémoire. Cette question explore les complexités de l'allocation dynamique de mémoire avec des pointeurs en C++, en se concentrant sur ses applications, ses défis et ses meilleures pratiques.

    Aperçu du scénario*:

    L'allocation dynamique de mémoire avec des pointeurs offre flexibilité et polyvalence dans la programmation C++, permettant aux développeurs d'allouer et de désallouer des ressources mémoire de manière dynamique au moment de l'exécution. Cette question vise à explorer les subtilités de l'allocation dynamique de mémoire avec des pointeurs en C++ et cherche à découvrir les meilleures pratiques pour gérer efficacement les ressources mémoire.

    voici l'extrait de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
     
    int main() {
        // Example demonstrating dynamic memory allocation with pointers in C++
        int* ptr = new int; // Allocate memory dynamically for an integer
        *ptr = 10; // Assign value to dynamically allocated memory
     
        std::cout << "Dynamically allocated memory value: " << *ptr << std::endl;
     
        delete ptr; // Deallocate dynamically allocated memory
     
        return 0;
    }
    Points clés de discussion*:

    Notions de base sur l'allocation dynamique de mémoire*: discutez des principes fondamentaux de l'allocation dynamique de mémoire en C++, y compris les opérateurs new et delete pour l'allocation et la désallocation de mémoire de manière dynamique. Abordez les différences entre l'allocation de mémoire statique et dynamique et explorez les scénarios courants dans lesquels l'allocation de mémoire dynamique est nécessaire.

    Durées de vie des pointeurs et fuites de mémoire*: explorez le concept de durée de vie des pointeurs en C++ et discutez des techniques de gestion de la durée de vie des pointeurs afin d'éviter les fuites de mémoire et les pointeurs suspendus. Résolvez les pièges courants associés à l’allocation dynamique de mémoire et fournissez des informations sur les stratégies de détection et de prévention des fuites de mémoire.

    Techniques de désallocation de mémoire*: discutez des meilleures pratiques pour désallouer la mémoire allouée dynamiquement en C++, y compris la désallocation manuelle de la mémoire à l'aide de l'opérateur de suppression et l'utilisation du pointeur intelligent pour la gestion automatique de la mémoire. Abordez l’importance d’une désallocation de mémoire appropriée pour éviter les fuites de mémoire et la corruption de la mémoire.

    Cas d'utilisation de l'allocation dynamique de mémoire*: explorez les applications pratiques de l'allocation dynamique de mémoire avec des pointeurs dans la programmation C++, telles que les structures de données dynamiques, les tableaux redimensionnables et l'instanciation d'objets. Expliquez comment l'allocation dynamique de mémoire permet une gestion efficace des ressources et facilite la manipulation dynamique des données, comme illustré ici à titre d'exemple.

    merci
    j'espère que quelqu'un va aider

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Bonjour,
    Déjà, je ne vois pas la question dans ton message.

    De plus, ce code est obsolète depuis au moins C++11! De nos jours on n'utilise pratiquement plus de pointeurs nus en C++, l'allocation dynamique étant gérée par des pointeurs intelligents:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <iostream>
    #include <memory>
     
    int main() {
    	// Example demonstrating dynamic memory allocation with smart pointers in C++
    	std::unique_ptr<int> ptr = std::make_unique<int>(); // Allocate memory dynamically for an integer
    	*ptr = 10; // Assign value to dynamically allocated memory
     
    	std::cout << "Dynamically allocated memory value: " << *ptr << std::endl;
    	return 0;
    } //smart pointer is deleted when scope ends
    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.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 118
    Points : 1 641
    Points
    1 641
    Par défaut
    Salut,

    Admettons que tu n'aies pas le droit d'utiliser la librairie standard (quelle hérésie !!), ton code est faux.
    En effet, l'opérateur new peut lever une exception, qu'il faut prendre en compte.
    Et la, les approchent diffèrent (ainsi que la complexité du code).
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include <iostream>
    #include <exception>
     
    int main()
    {
    	// Example demonstrating dynamic memory allocation with pointers in C++
    	try
    	{
    		int* ptr = new int; // Allocate memory dynamically for an integer
    		*ptr = 10; // Assign value to dynamically allocated memory
     
    		std::cout << "Dynamically allocated memory value: " << *ptr << std::endl;
     
    		delete ptr; // Deallocate dynamically allocated memory
    		return EXIT_SUCCESS;
    	}
    	catch(std::bad_alloc& e)
    	{
    		std::cerr << e.what();
    		return EXIT_FAILURE;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <iostream>
    #include <exception>
     
    int main()
    {
    	// Example demonstrating dynamic memory allocation with pointers in C++
    	int* ptr;
    	try
    	{
    		ptr = new int; // Allocate memory dynamically for an integer
    	}
    	catch(std::bad_alloc& e)
    	{
    		std::cerr << e.what();
    		return EXIT_FAILURE;
    	}
    	*ptr = 10; // Assign value to dynamically allocated memory
     
    	std::cout << "Dynamically allocated memory value: " << *ptr << std::endl;
     
    	delete ptr; // Deallocate dynamically allocated memory
    	return EXIT_SUCCESS;
    }

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Prendre en compte l'exception au moment du new n'est pas suffisant.
    operator<<(std::cout,...) peut lui aussi produire une exception. Les 2 codes simples de @deedolith ne sont donc pas suffisants pour gérer correctement le code proposé @Jesse100, il reste un gros risque de memory leak.
    Comme ça ne fait que 35 ans que je fais du C++, je ne me risque pas à proposer un code correctif où je risque fort de faire une erreur

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    a- Déjà, je ne vois pas la question dans ton message.

    b- De plus, ce code est obsolète depuis au moins C++11!
    a- Ce n'est pas une pub déguisée vers un cours de C++ historique?

    b- Tu es bien gentil. C'était déjà critiquable en C++ 98, et la cible des critiques début 2000 quand on parlait déjà de Modern C++ Style.

    En VO, une attaque indirecte du style historique, avec mise en avant du RAII: https://ra3s.com/wordpress/dysfuncti...gramming/?p=59
    Le billet avait été traduit par Alexandre Laurent, et republié ici.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 118
    Points : 1 641
    Points
    1 641
    Par défaut
    @daflab:
    Certes, c'est simpliste (et naïf), mais ca met déjà en valeur le surplus de travail inutile.

    Et n'oublions pas toutes les emmerdes inhérentes aux pointeurs nu.

Discussions similaires

  1. Développez une application Web dynamique et interactif avec des templates
    Par llaffont dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 21/02/2011, 15h56
  2. Réponses: 0
    Dernier message: 14/11/2009, 15h49
  3. remplir dynamiquement un <div> avec des images
    Par petitours dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/12/2008, 19h28
  4. Allocation Dynamique de Memoire Avec Operateur New
    Par msstaf dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/06/2006, 15h49
  5. Réponses: 9
    Dernier message: 22/12/2005, 22h20

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