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 :

HEAP CORRUPTION DETECTED


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 14
    Par défaut HEAP CORRUPTION DETECTED
    Bonjour tout le monde!

    je veux implementer un merge sort dans le code ci-dessous avec Visual Studio 2010 sauf que j'ai le message d'erreur suivant:

    ******************************************************************************
    HEAP CORRUPTION DETECTED: after Normal Block(#136) at 0x001E4A88 *
    CRT detected that the application wrote to memory after end of heap buffer *
    ******************************************************************************

    Je devine que c'est un problème de fuite de mémoire, mais je n'arrive pas à voir l'erreur dans le code. Pourriez-vous m'aider?

    Merci par avance!

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    #include <iostream>
     
    using namespace std;
     
    template<typename mtype>
    void merge(mtype* a, unsigned int ileft, unsigned int imiddle, unsigned int iright)
    {
        unsigned int i=ileft;
        unsigned int j=imiddle;
        unsigned int k=ileft;
     
        mtype* b= new mtype[iright-ileft+1];
     
        while (i<imiddle || j<iright)
        {
            if (i<imiddle && j<iright)
            {
                if (a[i]<a[j])
                {
                    b[k]=a[i] ; k++ ; i++; 	   
                }
                else
                {
                    b[k]=a[j] ; k++ ; j++; 
                }
            }
            else if (i==imiddle)
            {
                b[k]=a[j] ; k++ ; j++; 
            }
            else if (j==iright)
            {
                b[k]=a[i] ; k++ ; i++;
            }
        }
     
        for (unsigned int d=ileft ; d<iright ; d++)
        {
            a[d]=b[d];
        }
        delete b;
    }
     
    template<typename mtype>
    void sort(mtype* a, unsigned int n)
    {
        for (unsigned int window=1 ; window<n ; window*=2)
        {
    	for (unsigned int i=0 ; i < n ; i+=window*2)
    	{
    	    unsigned int left=i;
    	    unsigned int middle=i+window;
    	    unsigned int right=i+2*window;
                merge<mtype>(a, left,middle,right);
    	}
        }
    }
     
    int main()
    {
        int a[10];
     
        a[0]=2;
        a[1]=3;
        a[2]=5;
        a[3]=12;
        a[4]=14;
        a[5]=4;
        a[6]=9;
        a[7]=10;
        a[8]=40;
        a[9]=43;
     
        //merge<int>(a, 0,5,9);
        sort<int>(a,10);
     
        for (unsigned int d=0 ; d<10 ; d++)
        {
            cout << "a[" << d << "]=" << a[d] << endl;
        }    
    }

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Heap Corruption ce n'est pas une fuite mémoire, mais une corruption de mémoire.
    Tu écris probablement dans une zone mémoire que tu n'as pas allouée.
    En voyant ton code, tu as un problème avec b et k.
    Tu alloues b comme un tableau contenant right - left éléments, mais tu initialises k à left, au lieu de 0.
    Je n'ai pas été plus loin, mais ça pue déjà assez avec ça.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

Discussions similaires

  1. [DB2] Error DBFNTX/1012 Corruption detected
    Par ApprentiOracle dans le forum DB2
    Réponses: 2
    Dernier message: 28/05/2010, 15h52
  2. "heap corruption detected" sur desallocation de tableau de pointeurs
    Par app25 dans le forum Bibliothèque standard
    Réponses: 5
    Dernier message: 16/07/2009, 17h33
  3. Heap Corruption Detected à la fermeture du programme
    Par Myth_Titans dans le forum Ogre
    Réponses: 7
    Dernier message: 16/06/2008, 20h20
  4. HEAP CORRUPTION DETECTED
    Par li_causi dans le forum C++
    Réponses: 4
    Dernier message: 27/04/2008, 22h44
  5. [Bug] Heap Corruption
    Par poukill dans le forum C++
    Réponses: 1
    Dernier message: 23/08/2007, 14h56

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