Exception Fehler, beim Aufruf einer Methode Bitte um Hilfe!



  • Hallo bei folgenden Code ...

    bool TSearch::SetSource(char search_source_set[], int search_source_size_set){
            strcpy(search_source, search_source_set);
            search_source_size = search_source_size_set;
            }
    

    ...kommt folgende Fehlermeldung beim Ausführen:

    Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. 
    Meldung: 'Zugriffsverletzung bei Adresse 40006A2F in Modul 'rtl60.bpl'. 
    Lesen von Adresse 610A0DD64'. Prozeß wurde angehalten. Mit Einzelne 
    Anweisung oder Start fortsetzen.
    

    Die Klasse habe ich so aufgebaut:

    class TSearch
    {
    	private:
    		char search_source[];
            int search_source_size;
    		int search_pointer;
    	public:
    		TSearch();
            TSearch(char search_source_set[], int search_source_size_set);
            ~TSearch(void);
    		int GetPointer();
    		char * GetResult(char searchvalue[], int end);
            bool SetPointer(int search_pointer);
            bool SetSource(char search_source[], int search_source_size);
    };
    

    Wenn ich mir das ganze im Debugger-Modus anschaue, wird search_source den Wert von search_source_set zugewiesen z.B. "hallo\r\nwiegehts?\r". Soweit so gut aber sobald ich aus der Methode SetSource draußen bin und mir den search_source der Klasse angucke steht anstatt "hallo\r\nwiegehts?\r" nur noch "\x13". 😕

    Ich hoffe mir kann einer helfen.
    Danke im Voraus
    mfg mich0r



  • Warum nimmst Du nicht AnsiString oder std::string? Dann mußt Du Dich um die Speicherallokation nicht kümmern, was Du hier auch nicht getan hast.



  • Fehler gefunden ich hab in der Klasse TSearch die Variable search_source einen festen Bereich zugeteilt

    char search_source[65355];
    

    nun funktioniert es 🙂

    mfg
    mich0r



  • Hallo

    Ich rate davon ab solche großen statischen Arrays potential auf dem Stack anzulegen, insbesondere wenn die Größe nur so hoch geschraubt wurde um "unerklärliche" Fehlermeldungen wegen Überschreitung der Arraygrenzen zu verhindern. Warum nimmst du nicht AnsiString anstelle char[]? oder wenigstens ein dynamisch (auf dem Heap) angelegtes char-Array über einen char* ?

    bis bald
    akari


Anmelden zum Antworten