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 :

crash simplement lors d'un new


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Par défaut crash simplement lors d'un new
    Bonjour,

    J'ai un code principalement orienté C mais il existe tout de même de plus en plus de dérivé C++. Ainsi par exemple dans l'une des fonctions, j'ai rencontré un new.
    Waouh!
    Bon non, sans rire, j'ai un crash microsoft lors de l'exécution de mon programme. Mon débuggueur m'amène sur la pile un problème d'allocation mémoire puisque le crash est du à la sortie en exception (throw) qui doit être BAD_ALLOC lors d'une création de mémoire. Si j'utilisais des images gigantesque, je pourrais me dire que j'arrive à la limite mémoire et que c'est normal...mais non, c'est une pauvre image 30x30. Alors je cherche des pistes si vous en avez...

    Le code qui semble la cause du crash est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FLOAT** AreaDataFilt = new FLOAT*[width]; (avec width=9)
    et le dernier message de la pile est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
            {       // try to allocate size bytes
            void *p;
            while ((p = malloc(size)) == 0)
                    if (_callnewh(size) == 0)
                    {       // report no memory
                    static const std::bad_alloc nomem;
                    _RAISE(nomem);
                    }                                                    << curseur là
     
            return (p);
            }
    N'y a t-il pas d'autre option que plus de place mémoire (qu'il me paraît pourtant impossible d'atteindre dans mon cas) ?

  2. #2
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Et avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FLOAT** AreaDataFilt = new FLOAT[width]; //(avec width=9)
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FLOAT** AreaDataFilt = new FLOAT*[width]; //(avec width=9)
    ?

    PS : Utilises les balises [code]

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Par défaut
    heu, ben oui, je veux bien essayer mais il faudrait que je soit capable d'entourlouper mon compilo...
    Comment veux-tu faire croire qu'un FLOAT** c'est pareil qu'un FLOAT* ?

    enfin en bref, ce n'est pas pareil et en plus ce n'est pas faisable. DSL

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Vérifie l'occupation mémoire au cas où (fuite ?)... mais sinon je dirais que le débogueur n'arrive tout simplement pas à localiser correctement la source du problème.
    En général, il faut passer aux techniques de recherche d'aiguille dans une botte de foin
    qui doit être BAD_ALLOC
    Tu n'es pas sur de l'exception envoyée ?

    Et en faisant une allocation sur la pile ? (attention à la durée de vie)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FLOAT* AreaDataFilt[width]; // (avec width=9)
    Bref, ça va être difficile d'aider

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Par défaut
    J'ai suivi l'idée en testant un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int a=0;
    INT* test = new INT[500];
    J'ai crash pareil...

    J'ai du coup tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INT *test0 = (INT*)malloc(100*sizeof(INT));
    et là miraculeusement ça passe...
    Donc j'ai bien de la mémoire mais pourquoi mon new n'en veut pas?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Par défaut
    ah oui, mais mon test0 est null.... donc j'ai bien un problème mémoire

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Ce bout de code que tu as testé, c'est dans le même fichier, ou dans un projet à part ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Par défaut
    C'est dans le même code, la même page, le même endroit...

    Après un peu plus d'investigation, une fonction omise supprime le problème. Il semblerait qu'il y ait des dépassements mémoire dans un tableau amont dans cette fonction. En fait, je travaille avec une image trop petite...et en effet le problème disparaît sur de grosses images

    Est-ce qu'un dépassement mémoire de la sorte peut impacter l'allocation mémoire comme présenté? Si oui, comment ça se fait?

Discussions similaires

  1. [XL-2007] Crash excel lors de la création d'une macro par code
    Par miikado dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/11/2011, 18h47
  2. Erreur lors d'un New Outlook.Application
    Par Kazuko dans le forum ASP.NET
    Réponses: 7
    Dernier message: 06/09/2011, 18h59
  3. [PDO] Erreur HY000 lors d'un New PDO pour une connexion sur Mysql
    Par siciliano21 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/07/2009, 15h19
  4. Réponses: 8
    Dernier message: 31/07/2008, 13h05
  5. Crash VB6 lors de développement de DLL
    Par hn2k5 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 15/05/2007, 09h54

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