Zugriff Überlauf



  • Hallo,

    ich habe (immernoch) ein BCB3-Projekt, welches als *.exe nicht startet bzw. im Debugger eine EAccesViolation wirft(heißt das so?). Das Projekt habe ich jetzt mal in einen temporären Ordner gelegt und im BDS2006 mit voll aktiviertem CodeGuard laufen lassen. (Das wurde mir hier im Forum empfohlen.) Das Ergebnis:

    CodeGuard schrieb:

    Zugriff Überlauf im Prozess: PROJECT1.exe(2088) - C:\PROJECT1\Temp\Unit2.cpp#124
    Versuch auf 1 Byte(s) bei 0x00419670+828 zuzugreifen, das ist bei Offset 0+828 in block 0x00419670(=PROJECT1.exe:0x02:002670), der nur 60 Byte lang ist.
    0x0040EC7F - C:\PROJECT1\Temp\Unit2.cpp#124
    0x5205010F
    0x5204FD52
    0x0040203C - c:\programme\borland\bds\4.0\include\vcl\Forms.hpp#1008
    0x0040E340 - C:\PROJECT1\Temp\Unit2.cpp#30
    0x5205935C

    Da ich noch lange kein guter Programmierer bin und mir die Erfahrung fehlt, ist diese Meldung ziemlich abstrakt... Könnt ihr mir Hinweise dazu geben?

    Die entsprechende CodeZeile sieht so aus:

    UsedBaud= (unsigned char)Baudrates[mBaudrate];
    

    die Variablen / Felder sind alle in dieser Unit (bzw im Header unter public) deklariert:

    unsigned char UsedBaud;
    unsigned char mBaudrate;
    int Baudrates[15] = {CBR_110,CBR_300,CBR_600,CBR_1200,CBR_2400,CBR_4800, \
                         CBR_9600,CBR_14400,CBR_19200,CBR_38400,CBR_56000, \
                         CBR_57600,CBR_115200,CBR_128000,CBR_256000};
    

    Ich bin im Moment ziemlich ratlos.



  • Ich hoffe mal, du hast vor dieser Zuweisung der Variablen 'mBaudrate' einen gültigen Wert (0 bis 14 inklusive) zugewiesen.



  • Hallo,

    der Wert für mBaudrate wird aus einer Konfigurationsdatei gelesen und da ich für diesen Teil keine Fehlermeldung bekam, nahm ich an der Wert stimmt. Wie blöd! Es stand 0xCF drin... 🙄
    Danke für den Hinweis! Aber wie man die CodeGuard-Meldung sinnvoll übersetzen kann, kannst du mir nicht evtl. sagen?



  • Doch, die Fehlermeldung:

    Versuch auf 1 Byte(s) bei 0x00419670+828 zuzugreifen, das ist bei Offset 0+828 in block 0x00419670(=PROJECT1.exe:0x02:002670), der nur 60 Byte lang ist.
    

    besagt, daß du nur 60 Bytes reserviert hast (15 * sizeof(int)), aber auf den Offset 828 (0x033C) zugreifst (d.h. der Index ist dann 828/4 = 207 (0xCF)).



  • Boah 😮 , wie einfach sich das liest... Das leuchtet ein 💡 , Danke!!! 👍 🙂


Anmelden zum Antworten