J'ai le bout de code suivant qui fait une exception violation d'accès

dès sa création sans que BCB indique la ligne de code qui cause l'erreur. Il s'agit d'un

programme sur la cryptographie polyalphabétique
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
 
char alphabet[26]={'A','B'}//à Z
 
TPolyAlphabetique::TPolyAlphabetique(){
textclair=new char[255];textcrypte=new char[255];
chainecle=new char[255];cle=new char[255];
}
 
TPolyAlphabetique::~TPolyAlphabetique(){
delete textclair;delete textcrypte;delete chainecle;delete cle;
delete[] abaque;
}
 
void TPolyAlphabetique::fillAbaque(){
int i,j;
for(i=0;i<26;i++)
	for(j=0;j<26;j++) abaque[i][j]=alphabet[(j+i)%26];
//en effet, le d‚calage de chaque ligne se fait … chaque i
//pas de -1 comme en JulesCesar car k=4 => commence par E ici
}
 
char TPolyAlphabetique::correspond(char clair,char cle){
int i,j;char brou;
for(j=0;j<26;j++){
	if(clair==abaque[0][j]) break;
}
for(i=0;i<26;i++){
	if(cle==abaque[i][0]) break;
}
brou=abaque[i][j];
return(brou);
}
 
char TPolyAlphabetique::correspond2(char cle,char crypt){
int i,j;char brou;
for(i=0;i<26;i++){
	if(cle==abaque[0][i]) break;
}
for(j=0;j<26;j++){
	if(crypt==abaque[j][i]) break;
}
brou=abaque[j][0];
return(brou);
}
 
void TPolyAlphabetique::crypter(){
//buildstrkey();
int L=strlen(textclair);char c;char * res=new char[255];
for(int i=0;i<L;i++){
	c=correspond(textclair[i],chainecle[i]);
	res[i]=c;
}
res[L]=0;strcpy(textcrypte,res);
}
 
void TPolyAlphabetique::decrypter(){
//buildstrkey();
int L=strlen(textcrypte);char c;char * res=new char[255];
for(int i=0;i<L;i++){
	c=correspond2(chainecle[i],textcrypte[i]);
	res[i]=c;
}
res[L]=0;strcpy(textclair,res);
}
 
void TPolyAlphabetique::buildstrkey(){
int lk=strlen(cle);int ltxt;char * tmp=new char[50];
chainecle="";
if (strlen(textclair)>strlen(textcrypte)) ltxt=strlen(textclair);
	else ltxt=strlen(textcrypte);
int d=ltxt/lk;int m=ltxt%lk;
for(int i=0;i<d;i++) strcat(chainecle,cle);
if(m>0) strncpy(tmp,cle,m);
strcat(chainecle,tmp);
chainecle[ltxt]=0;//finir chainecle par le kre nul
}
Voici le bouton pour l'appeler, la clé et le texte clair dans Edit2 et Edit1
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
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TPolyAlphabetique * P=new TPolyAlphabetique();
try{
P->fillAbaque();
P->textclair=Edit1->Text.c_str();
P->cle=Edit2->Text.c_str();
P->buildstrkey();
Label1->Caption.sprintf(P->chainecle);
P->crypter();
Edit3->Text.sprintf(P->textcrypte);
}
catch(...){
ShowMessage("Erreur");
}
//delete P;
}
En fait, je voulais partager ce code, le mettre en ligne mais il plantouille!!!!