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 :

manque de mémoire !?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut manque de mémoire !?
    bonjour tous,
    je désire ouvrir un bitmap pour affichage écran ; le problème c'est que
    l'allocation mémoire semble planter le programme :
    j'alloue plus de 232ko (c'est un ptit bitmap).
    Est-il possible d'allouer autant de mémoire et même plus ??
    PS: ma machine tourne sur vista avec 4Go de RAM.

  2. #2
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Normalement, il ne devrait pas avoir de problème avec l'allocation dynamique.
    Quelle est l'erreur affichée ? Comment fais-tu l'allocation mémoire ?

  3. #3
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    Ok , en premier lieu j'ouvre un ifstream :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ifstream in.open(nom_de_fichier_bmp,ios::binary;
    - Ensuite je lis les 2 premières structures du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BITMAPFILEHEADER bfh;
    BITMAPINFOHEADER bih;
    .....
    .....
    in.read((char*) &bfh,sizeof(BITMAPFILEHEADER));
    in.read((char*) &bih,sizeof(BITMAPINFOHEADER));
    jusque la tout va bien car les structures contiennent les bonnes informations.
    ça se complique avec l'obtention des octets du bitmap car il faut d'abord savoir si celui ci contient une table des couleurs mais bref ...
    - j'initialise un pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LPSTR lpstrBitmap;
    ....
    ....
    lpstrBitmap = new char[nb_octets_du_bitmap]
    in.read((char) lpstrBitmap,nb_octets_du_bitmap);
    Le programme compile et s'execute mais le système ne reprend jamais la main !?

  4. #4
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    lpstrBitmap convertit en char? sans même aller plus loin, je dirai que y a un soucis ^^

  5. #5
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    c'est juste une histoire de recopie. Je vais essayer ce que tu dis .
    Néanmoins je peux peut être essayer de récupérer l'erreur non ?!

  6. #6
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Par défaut
    Tu peux essayer de lancer ton programme dans un debugger pour voir ce qu'il a à dire, oui. En général c'est ce qu'il faut faire quand on ne voit pas sois-même où est le problème

  7. #7
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    in.read((char) lpstrBitmap,nb_octets_du_bitmap);
    C'est une erreur de recopie, ou tu as oublié l'étoile dans (char*) ?

    Si ce n'est pas le cas, alors je te conseille d'essayer de reproduire ce phénomène avec le plus petit code possible, c'est à dire reprendre le code qui ne marche pas et créer un petit programme qui ne fait que ça. Si tu y arrives (le code devrait faire une 100aine de ligne), tu peux le poster ici en entier et on verra alors si quelque chose cloche. Car à part l'erreur que j'ai citée ci-dessus, je ne vois aucun problème avec le code que tu as posté jusqu'ici.

    Et pour répondre à ta question initiale, on peut allouer de très très gros tableaux en C ou C++. Tu peux essayer là aussi avec un petit programme de test pour voir quelle est la limite de ton système, car rien n'est imposé au niveau du C++. Le code devrait lancer une exception (du style bad_alloc) une fois que tu auras dépassé cette limite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Plantage sans doute par manque de mémoire
    Par verbose dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 15/11/2007, 12h18
  2. Manque de Mémoire Virtuelle
    Par mayiba21 dans le forum Windows XP
    Réponses: 4
    Dernier message: 12/12/2006, 09h53
  3. [W2000 Pro] Manque de mémoire virtuelle empêche la connexion
    Par 2Eurocents dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 30/11/2006, 20h20
  4. Manque de mémoire
    Par GO dans le forum C++
    Réponses: 1
    Dernier message: 25/09/2006, 16h30
  5. Manque de mémoire virtuelle sur Win2000 pro
    Par annedjomo dans le forum Windows Serveur
    Réponses: 7
    Dernier message: 02/03/2005, 10h16

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