Probleme de compilation DEBUG ERROR DAMAGE AFTER NORMAL BLOCK

Résolu
ali_saguer1 Messages postés 5 Date d'inscription lundi 7 août 2006 Statut Membre Dernière intervention 10 avril 2008 - 9 avril 2008 à 18:33
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009 - 20 avril 2009 à 11:18
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

nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
10 avril 2008 à 17:37
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 ...!
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
9 avril 2008 à 18:54
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".
0
ali_saguer1 Messages postés 5 Date d'inscription lundi 7 août 2006 Statut Membre Dernière intervention 10 avril 2008
9 avril 2008 à 19:10
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
0
ali_saguer1 Messages postés 5 Date d'inscription lundi 7 août 2006 Statut Membre Dernière intervention 10 avril 2008
10 avril 2008 à 20:50
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009
20 avril 2009 à 11:18
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
0
Rejoignez-nous