bonjour à tous, voila moi j'ai un p'ti problème plutot embêtant.... je dois créer un class qui gère les chaines de caractères (ne me demander pas pourquoi je veux faire ca....je suis obligé pour mon cour de c++).
je vous montre d'abord les étape principales:
class TString
{
private:
int size; // taille réelle de la zone pointée
int blocsize; // taille des blocs de lachaine
int length; //longeur de la chaine
char * pstr;
public:
.
.
.
void Append(char *); // fonction qui ajoute
void Erase(int,int nbre_char=INT_MAX); //fonction qui éface
};
je vous ai passé les étapes des constructeur et autres broles car mon problème tourne autour de ces 2 fonctions.
voici les 2 fonctions proprement dites:
void TString::Append(char * chaine)
{
length=length+strlen(chaine);
if (length > size-1 )
{
char * temp;
size=((length+blocsize)/blocsize)*blocsize;
temp= new char [size];
strcpy(temp,pstr);
strcat(temp,chaine);
delete []pstr;
pstr=temp;
delete []temp;
}
else
{
strcat(pstr,chaine);
}
}
//--------------------------------------------------------------------
void TString::Erase(int position,int nbre_char)
{
if (nbre_char!=0)
{
if(position + nbre_char <= (size - 1))
{
length=length-nbre_char;
size=((length+blocsize)/blocsize)*blocsize;
char * temp= new char [size];
mon problème se situe juste ici
for (int i=0; i<position; i++)
{
temp[i]=pstr[i];
}
int k=position+nbre_char;
for(int j=position;j<size;j++)
{
temp[j]=pstr[k];
k++;
}
delete []pstr;
pstr=temp;
delete []temp;
}
else
{
length=position;
size=((length+blocsize)/blocsize)*blocsize;
char * temp= new char [size];
for (int i=0; i<position; i++)
{
temp[i]=pstr[i];
}
delete []pstr;
pstr=temp;
delete []temp;
}
}
}
voici enfin le main:
int main(int argc, char* argv[])
{
TString s06;
s06.Append("9ABCDEF");
s06.Erase(2,3);
s06.Erase(11,2);
s06.Erase(8);
s06.Erase(4,0);
s06.Erase(8,40);
return 0;
}
ne faite pas trops attention si il vous semble qu'il manque quelque chose car tout ou presque fonctionne mais voila...
exposé du problème:
dans la fonction APPEND (ajoute une chaine à une autre) lorsque je fais "char * temp" (je définis un pointeur sur caractères) la zone pointé contient n' importe quoi, jusque là on est ok tout se passe normalement.
et la fonction tourne normalement aussi.
MAIS
dans la fonction ERASE (suprime un certain nombre de caractères à partir d'une position donnée) lorsque je fais "char * temp" la zonne pointé NULL (indéterminée) et je comprend pas pourquoi???
car ca fais tout foirer ca car mon pointeur "pstr" ne pointe plus là ou il faut non plus.
j'ai bien analysé le problème et c'est la qu'il se trouve.
Si un gentille personne pouvais un peu me renseigner ca serait sympa car j'y comprend plus rien surtout que je n'ai ni erreur ni warning ni rien mais le programme plante quand il se lance..... avec des tas d'erreur de mémoire et tout le tralala
MERCI d'avance à toute personne qui se penchera au moin un p'ti peu sur mon problème.
Bertrand