Avatar billede fbisen Nybegynder
18. september 2007 - 11:14 Der er 1 løsning

Krypteringsfejl (Giver fejl ved lang tekst)

Hej Eksperter!
Jeg sidder og prøver at lave en krypteringsmekanisme. Krypteringen foregår fint, så længe den AnsiString jeg krypterer ikke er for lang (>300). Derefter kommer debuggeren med en fejl, som jeg har kopieret ind nederst.
Jeg bruger Borland Builder c++ version 6 på en XP maskine.

Venlig hilsen
Kasper

Min funktion ser således ud:
----------------------------------------------------------------
AnsiString __fastcall TForm1::Crypter(AnsiString text, AnsiString Key) {
        int KeyLength = Key.Length();
        unsigned char *encvalues;
        encvalues = new unsigned char[KeyLength+1];
        for (int i = 0; i < KeyLength; i++)
        {
            encvalues[i] = Key[i+1];
        }

        if(text.Length() <= 0)
        {
                return NULL;
        }
        if(Key.Length() <= 0)
        {
                return NULL;
        }


        if(text.SubString(text.Length()-1, 2) == "\r\n")
        {
                text = text.SubString(0, text.Length()-2);
        }

        if(text.SubString(text.Length()-2, 2) != "\0")
        {
                text = text + '\0';
        }


        encvalues[KeyLength] = '\0';

        for(int i = 0; i < KeyLength; i++)
        {
            if(encvalues[i] < 128)
            {
                encvalues[i]+=127;
                i--;
            }
        }

        AnsiString result = "";
          char ch;
        int max = text.Length();
        char *pointerThing;
        pointerThing = new char[max+1];
        pointerThing = "";
        char *pointerThing2 = pointerThing;
        int eindex = 0;
    for(int i = 1; i <= max; i++) {
        ch = text[i];
        if (ch)
            *pointerThing2++ = ch ^ encvalues[eindex++];
                else
                        *pointerThing2 = '\0';
        eindex %=KeyLength;
    }
        result = (AnsiString)pointerThing;
        delete[] encvalues;
        delete[] pointerThing;
        return result;
}
-----------------------------------------------------------------

Debuggeren fortæller mig dette, som jeg ikke rigtigt kan tyde til andet end en fejl.

---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address DAD9D4F0. Read of address DAD9D4F0'. Process stopped. Use Step or Run to continue.
---------------------------
OK  Help 
---------------------------
Avatar billede fbisen Nybegynder
18. september 2007 - 11:57 #1
Jeg har endelig selv fundet fejlen! Jaaa!

Jeg kan til at indse, at pointerThing = "" overskriver addressen til pointeren. Ups.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester