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++Builder Discussion :

Problème Access Violation dans une classe


Sujet :

C++Builder

  1. #1
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 218
    Points : 1 437
    Points
    1 437
    Par défaut Problème Access Violation dans une classe
    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!!!!
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  2. #2
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 218
    Points : 1 437
    Points
    1 437
    Par défaut
    Si j'utilise MessageBox() pour afficher la réponse à la place de Edit1->Text= alors j'arrive à voir le texte crypté de réponse mais si je clique une 2è fois sur Button1 alors la violation d'accès apparaît.
    S'agit-il d'une erreur du constructeur ou du destructeur?

    Je me demande si quelqu'un peut feuilleter ce code à la recherche d'erreur! Merci
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

Discussions similaires

  1. Problème avec .configure dans une classe
    Par Instanton dans le forum Tkinter
    Réponses: 2
    Dernier message: 29/12/2007, 09h37
  2. [POO] Probléme de syntaxe dans une classe
    Par jewelz dans le forum Langage
    Réponses: 3
    Dernier message: 03/11/2007, 03h57
  3. Problème de setInterval dans une Classe
    Par jeremie74 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 21/08/2007, 19h45
  4. Problème Acces Violation dans une DLL d'envoi de mail
    Par Avisseau dans le forum Delphi
    Réponses: 1
    Dernier message: 25/10/2006, 16h48
  5. problème d'accès dans une classe dérivée!
    Par chrono23 dans le forum C++
    Réponses: 47
    Dernier message: 10/10/2006, 11h22

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