Probleme de compilation DEBUG ERROR DAMAGE AFTER NORMAL BLOCK [Résolu]

Signaler
Messages postés
5
Date d'inscription
lundi 7 août 2006
Statut
Membre
Dernière intervention
10 avril 2008
-
Messages postés
97
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2009
-
Bonjour,
Il se trouve que j'ai un projet en C++ et je suis complètement bloqué. A la fin de l'exécutionde mon projet , j'obtient le resultat que j'ai voulu mais une erreur s'affiche

DEBUG ERROR
DAMAGE AFTER NORMAL BLOCK
...

j'ai reussi à trouver la source de cette erreur, mais pas la manière de la corriger :
tout dabord , voici ma classe image, cette classe est censée avoir comme proprieté un objet de type matrice. la classe matrice fonctionne trés bien ( les surcharges ,les methodes...), mais c'est la surcharge de l'operateur = de la  classe image qui cause cette erreur

class image
{

private:
matrice matrice_pixel;

public:

    image(int n,int m) : matrice_pixel(n,m)
    {
        pixel p;

    for(int i=0; i<n;i++)
    for(int j=0; j<m;j++)
     matrice_pixel.remplir(i,j,p=pixel(0,0,0,0,i,j));
   
    }
   
    ~image(){    } // je pense que le probléme est ici, peut-etre je dois detruire matrice_pixel
...

image& operator=(const image &img)
{
if(this != &img)
{
matrice_pixel=img.matrice_pixel; //j'utilise le surcharge de l'operateur= de classe matrice
}
return (*this);

}
.....
};

Si quelqu'un pouvait m'indiquer la solution de cette erreur ce serait simpa.

Merci d'avance

5 réponses

Messages postés
416
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
2
Salut;

DEBUG ERROR DAMAGE AFTER NORMAL BLOCK : cette erreur se produit lorsque que tu essaies d'acceder a une adresse interdite , par exemple en depassant les limites de ton tableau, ou lorsque tu l'as fait et que tu essaies de desallouer l'espace. Reverifie ton code a ce niveau .

Pour ce qui est de ta classe , un destructeur serait le bienvenu. Ton code n'etant pas visible au complet sur le forum , je ne saurais en dire davantage pour aider.

du courage.
je suis heureux de faire partie d'une grande famille ...!
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Tu as alloué manuellement de la mémoire dans ta classe ? Non, donc tu n'as rien à détruire.
Je vois pas d'erreur dans ton code. Juste une remarque:
matrice_pixel.remplir(i,j, pixel(0,0,0,0,i,j) ); // devrait suffit si l'argument est une référence c onstante. Inutile de passer par "p".
Messages postés
5
Date d'inscription
lundi 7 août 2006
Statut
Membre
Dernière intervention
10 avril 2008

Merci de votre réponse Luthor,

il se trouve que j'ai alloué dynamiquement de la mémoire dans ma classe matrice.

voice le code:

template<class T>
class matrice
{
private:

T **mat;

int max_de_lignes;

int max_de_colonnes;

int nombre_de_lignes;

int nombre_de_colonnes;

public:
matrice(int n,int m)
{
max_de_lignes=n,
max_de_colonnes=m;
nombre_de_lignes=0;
nombre_de_colonnes=0;
mat=new T*[max_de_lignes];
for(int i=0;i<max_de_lignes;i++)
mat[i] = new T[max_de_colonnes];
}

est ce que je dois liberer de la mémoire dans le destructeur de la classe image?

merci d'avance
Messages postés
5
Date d'inscription
lundi 7 août 2006
Statut
Membre
Dernière intervention
10 avril 2008

merci de votre reponse nicky ,

mon probléme est résolue, en fait le probleme réside dans le destructeur de la classe
matrice
le code:

~matrice()
{
for(int i=0;i<max_de_colonnes;i++)// c'est  ici l'erreur, il faut remplacer max_de_colonnes par max_de_lignes
{
delete[] mat[i];
}
delete[] mat;
}

merci encore une fois
Messages postés
97
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2009

Bonjout Ali_seger

je t'écris car par rapport à ce sujet car le programme est fort intéressant, je fais un semblable avec la librairie GD
sous VC++ mais pour l'implémentation je n'ai pas encore tout

Pour ton programme, tu as définis une classe Image derivée de
matrice pixel donc ta classe matrice est générique et je pense à une classe couleur pour les paramètres RGB, mais doit elle être à son tour la classe de base pour une autre classe?

Pourrais tu m'envoyer ton design uml et methodes de tes classes ?

Merci

Ali