EAccessViolation bei Zugriff auf Klassenvariable (private: char*)



  • Hallo!

    Ich stehe gerade total auf der Leitung. Wo liegt der Fehler?

    Habe eine Klasse definiert, in der es eine private Variable char *Key gibt.
    Diese Soll mittels der Methode SetKey(char * K) gesetzt werden. Leider knallt
    es an der unten angeführten Stelle.

    // Klasse zur Überprüfung der Seriennummer
    class TRegister
    {
    private:
            char *Key;                // der CD-Key, 12 stellig
    public:
            TRegister();              // Konstruktor
            bool SetKey (char *k);    // Key setzen (Key = k)
            char *GetKey();           // Key abfragen (return Key)
            bool Valid();             // true, wenn Key gültig, false sonst
    };
    
    // Test - Formular, dass TRegister verwendet
    class TForm1 : public TForm
    {
    __published:	                // Von der IDE verwaltete Komponenten
            TLabel *Label3;
            TEdit *Edit1;
            TButton *Button1;
            TLabel *Label4;
            TButton *Button2;
            void __fastcall Button1Click(TObject *Sender);
            void __fastcall Button2Click(TObject *Sender);
            void __fastcall FormCreate(TObject *Sender);
    
    private:	                        // Anwender-Deklarationen
    
    public:		               // Anwender-Deklarationen
            __fastcall TForm1(TComponent* Owner);
    
            TRegister *CDKey;        // 1 Instanz in Form1 verwenden
    };
    
    [...]
    
    bool TRegister::SetKey(char *k)
    {
       Key = k;                      // <--- ERROR: EAccessViolation 
       return true;
    }
    
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      Key->SetKey("ABC-12345678");  // zugehöriger Aufruf
    }
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
       TRegister *Key = new TRegister();
    }
    


  • void __fastcall TForm1::FormCreate(TObject *Sender) 
    { 
       TRegister *Key = new TRegister(); 
    }
    

    muss

    void __fastcall TForm1::FormCreate(TObject *Sender) 
    { 
       Key = new TRegister();  // deklariert ist die Variable im Header
    }
    

    heissen



  • Ist mir peinlich aber ich hab's eben gemerkt 😉
    Key existiert doppelt; 1x global und 1x private

    Statt
    TRegister *Key = new TRegister();

    muss es natürlich
    Key = new TRegister();

    heissen.

    --CLOSE--



  • 😃


Anmelden zum Antworten