Programm läuft nicht auf 64bit PC



  • Hallo ihr Spezialisten!

    Ich bin wieder mal auf ein Problem gestoßen das ich mir nicht erklären kann.

    Ich habe ein fertiges Programm, das läuft wunderbar, mit eurer Hilfe in einigen anderen Threads 😋
    Jetzt habe Bugs reportet bekommen, und zwar nur von 64bit CPU Benutzern die mein Tool ausführen. Das Programm startet und läuft auch.

    Wenn ich jedoch eine Datei durch den Algorithmus jagen will, dann bekomme ich immer Fehlermeldungen der Art "Zugriffsverletzung bei Adresse 00401EF2 in Modul Project1.exe. Lesen von Adresse 7874314E"
    Also ein fehler mit dem Arbeitsspeicher, oder? Ich habe in Google und in der SuFu gesucht, aber nichts konkretes gefunden woran es scheitern könnte.

    Also VariablenTypen benutze ich nur AnsiString, char, int, TDataTime, bool. Außerdem Arbeite ich mit Streams wie ifstream und ofstream.

    Wenn ihr Code braucht, sagt bescheid!
    Ich danke schonmal!
    Tippo



  • Vermutlich ein Fehler im Programm. Versuche doch, das Programm mit CodeGuard zu kompilieren und auf dem 64-Bit-Rechner testen zu lassen.



  • Hallo

    Vermutlich liegt das Problem irgendwo wo du mit der Speicherbrteite arbeitest, und dort einen festen Wert von 4 Byte pro int/long annimmst.

    bis bald
    akari



  • akari schrieb:

    [...] einen festen Wert von 4 Byte pro int/long annimmst.

    Ist bei 32bit Windows auf 64bit CPU (und so verstehe ich die ursprüngliche Frage), ein int nicht weiterhin 4 Byte gross?



  • Hallo

    Hm denk schon. Dachte natürlich das auch ein 64-bit Windows verwendet wird. Naja außerdem müßte der Quellcode ja mit einem 64-bit Compiler neu kompiliert werden. Also passt es wohl nicht.

    bis bald
    akari



  • Also ich habe mir einen 64bit PC mit 32bit w#Windows bei meine Sis "geklaut" und alles noch mal neu kompiliert. Egebnis: nichts. Immer noch der selbe Fehler.

    Was ist denn der "CodeGuard", das kenne ich nicht. 😞

    Abe ich war eigentlich davon ausgegangen das ein 32bit Progg auf 64 funzt, nur halt andersrum nicht...

    Ich habe eine beta version der software die auf 64bit läuft, aber nachdem ich angefangen habe Streams zu verwenden läuft es nicht mehr. Habt ihr ne Ahnung ob es daran liegen kann??

    MfG
    Tippo



  • Tippokrates schrieb:

    Also ich habe mir einen 64bit PC mit 32bit w#Windows bei meine Sis "geklaut" und alles noch mal neu kompiliert. Egebnis: nichts. Immer noch der selbe Fehler.

    Ob die CPU 64-Bit-Erweiterungen unterstützt, spielt überhaupt keine Rolle für dein Programm. Interessant ist, ob das OS die nutzt, und wenn da ein 32-Bit-Windows installiert ist, tut es das nicht. Der Fehler liegt also _eindeutig_ in deinem Programm.

    Tippokrates schrieb:

    Was ist denn der "CodeGuard", das kenne ich nicht. 😞

    Dann wirds höchste Zeit. Schau in die Dokumentation und hier. Du kannst es in den Projektoptionen aktivieren.



  • audacia schrieb:

    Der Fehler liegt also _eindeutig_ in deinem Programm.

    Das seh ich ja ein, aber ich habe keinen Plan an welcher Stelle ein Fehler auftreten kann der sich dann nur auf PC's mit 64bit CPU's manifestiert. Denn wie bereits gesagt, auch 32bit CPU's treten die Speicherverletzungen nicht auf.

    Ich muss jetzt einfach den Quelltext hier zeigen, zumindest den Teil den ich zuletzt hinzugefügt habe, ab dem auf 64bit CPU'S nichts mehr lief:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #include <About.h>
    #include <clipbrd.hpp>
    
    #include <string>
    #include <fstream>
    #include <iostream>
    
    #pragma hdrstop
    
    #include "Sorter.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "trayicon"
    #pragma resource "*.dfm"
    
    using namespace std;
    
    //Variablen
    int iLinesCount;
    int iZeile = 1;
    AnsiString astrText, astrTextOld, astrTimeDiff, astrFileName;
    char strFileName[30];
    TDateTime dtTimeOnline, dtTimeOffline;
    
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    [...]
    //---------------------------------------------------------------------------
    

    Auf meiner Homepage könnt ihr den gesammten Quelltext SQLSorter_cpp.txt (im txt Format) finden. Die Datei mit Rechtsklick speichern... Das ist dann die gesammte cpp Datei. Nicht nur der Ausschnitt. http://freenet-homepage.de/tippokrates/sqlsorter_cpp.txt

    Allen die sich die Mühe machen den Quelltext zu lesen danke ich schonmal, vielleicht findet ihr Gurus hier was!

    Tippo



  • Oh mein Gott! Oh mein Gott!

    Ich habs gefunden! Grade als ich es hier gepostet habe, da stach es mir ja regelrecht in die Augen!

    #pragma package(smart_init)
    #pragma link "trayicon"
    #pragma resource "*.dfm"
    

    Ich linke noch auf den TrayIcon, obwohl ich alles was mit Tray zu tun hat wieder entfernt habe, da entsteht die Speicherverletzung bei #pragma link "trayicon"!

    Aber ich danke euch trotzdem!
    MfG
    Tippo


Anmelden zum Antworten