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 :

probleme avec pointeurs de pointeurs de pointeurs


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut probleme avec pointeurs de pointeurs de pointeurs
    Bonjour a tous,

    j'ai un ennui dans mon application :

    j'alloue de grandes quantités de mémoire (>1Go).
    j'utilise pour ça des pointeurs de pointeurs de pointeurs...
    que j'initialise de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    BYTE *** tab1;
    this->tab1=new BYTE**[this->nbC];
    for(int i=0;i<nbC;i++)
    {
    this->tab1[i]=new BYTE*[this->nbImg];
    for(int j=0;j<nbImg;j++)
    {
    this->tab1[i][j]=new BYTE[this->tailleImg];
    memset(this->tab1[i][j],0,this->tailleImg);
    }
    }
    L'allocation fonctionne bien ainsi que le travail sur les zones mémoires.

    Je désalloue de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for(int j=0;j<this->nbc;j++)
    {
    for(int i=0;i<this->nbImg;i++)
    {
    delete[] this->tab1[j][i];
    this->tab1[j][i]=NULL;
    }
    delete[] this->tab1[j];
    this->tab1[j]=NULL;
    }
    delete[] this->tab1;
    this->tab1=NULL;
    Mais par la suite, je ne peux plus réallouer de la mémoire supérieure à 1.4Go...
    un message apparait indiquant "mémoire insuffisante".
    pourtant le programme n'est pas arrivé à la limite des 2 Go

    Hors mon application doit tourner en boucle et réallouer continuellement de la mémoire....

    Un conseil ou une idée sur le probleme?

    Edit : coquille "nbImg" corrigé

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ca ne devrait pas être nbImg à la place de nbC ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    meme probleme avec les fonctions C malloc et free...

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Utilise std::vector

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    Merci pour ce conseil mais avant de reprendre tout mon code je voudrais être sur qu'il ne s'agit pas d'une erreur de code ou un probleme exterieur.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    le probleme semble apparaitre lorsque qu'on fait les sequences d'allocation suivantes :

    -alloc 1.4 Go -> alloc 300 Mo
    -alloc 1.4 Go -> free 1.4Go -> alloc 300Mo

    si on fait l'inverse
    alloc 300 Mo puis alloc 1.4Go pas de probleme.

    Y aurait-il un flag ou une variable qui est modifié dans windows ou dans mon programme dès qu'on réalise une allocation de +1Go?

  7. #7
    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 : 50
    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
    Si l'ordre d'allocation/désallocation a de l'importance, ton problème est peut-être lié à de la fragmentation de ta mémoire...
    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.

Discussions similaires

  1. probleme avec pointeur et iterateur
    Par tcharles dans le forum C++
    Réponses: 11
    Dernier message: 26/11/2006, 23h59
  2. Problèmes avec classes et pointeurs
    Par Anas1984 dans le forum C++
    Réponses: 2
    Dernier message: 02/11/2006, 12h49
  3. Probleme avec des pointeurs...
    Par barucca dans le forum C++
    Réponses: 5
    Dernier message: 23/08/2005, 21h05
  4. Réponses: 17
    Dernier message: 24/03/2005, 12h24
  5. probleme avec pointeurs de structures
    Par remi77 dans le forum C
    Réponses: 2
    Dernier message: 20/10/2003, 13h19

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