Zugriff auf Member von Steuerelement einer anderen Form löst Zugriffsverletzung aus
-
void __fastcall TKommandozentrale::ResIntervalTimer(TObject *Sender) { if (StrToInt(IncomeRate->Caption) > 0) { IncomeRate--; Income->Progress++; } else { Income->Progress = 0; switch(Lobby->ResGenSpeed->ItemIndex) { case(0): { IncomeRate->Caption = 50; break; } case(1): { IncomeRate->Caption = 35; } case(2): { IncomeRate->Caption = 22; } case(3): { IncomeRate->Caption = 10; } } } } //---------------------------------------------------------------------------
Dieser Quelltext löst eine Zugriffsverletzung aus.
Das müsste doch möglich sein oder irre ich mich, wie es immer tue (was das angeht).PS: In der Schleife war das ein ziemlicher Schock "DRRRRRRRRRRRRRRÖÖÖÖÖÖHHHHHHNNNNNNN --- ERROR".
Sollte das wirklich nicht möglich sein brauche ich eine Alternative.
(Bei Labeln gehts doch ???)
-
Schon mal den Debugger genutzt?
if (StrToInt(IncomeRate->Caption) > 0) // IncomeRate ist ein Label? { IncomeRate--; // Dekrement kann so nicht funktionieren ... }
evtl. Header der anderen Form korrekt eingebunden?
-
Ups sorry, das war überstürzt.
Korekt wäre es natürlich so:void __fastcall TKommandozentrale::ResIntervalTimer(TObject *Sender) { if (StrToInt(IncomeRate->Caption) > 0) { IncomeRate->Caption = IntToStr(StrToInt(IncomeRate->Caption)-1); Income->Progress++; } else { Income->Progress = 0; IncomeRate->Caption = Generationspeed->Caption; switch(StrToInt(Generationspeed->Caption)) { case(0): { IncomeRate->Caption = 50; break; } case(1): { IncomeRate->Caption = 35; break; } case(2): { IncomeRate->Caption = 22; break; } case(3): { IncomeRate->Caption = 10; break; } } } } //---------------------------------------------------------------------------
-
Zeile 11 ist überflüssig, wenn du in dein Switch nen default machst, sonst wird unnötigerweise 2x die Caption gesetzt, wenn eine der Cases zutrifft.
Ansonsten wie immer: Das Glaskugel-Plugin des Forums ist leider in Reparatur. Ohne Fehlermeldung / Fehlerzeile wird das hier munteres Kaffeesatzlesen...
mfg
xXx
-
ja ja, tut mir leid, ich hab sowieso viel zu früh gepostet.
Was ich nur lustig finde, dass der Quelltext oben so compiliert wurdeIncomeRate--;
Wenn IncomeRate ein Label ist. Den Fehler mach ich übrigens öfters, wenn ich etwas geistesabwesend oder müde bin.
-
Hallo
IncomeRate ist ein Zeiger, und -- verändert die Zieladresse des Zeigers (Ein Byte wird abgezogen, weiteres unter dem Stichwort Zeigerarithmetik). Das kompiliert prima, aber verursacht in diesem Fall potentiell Speicherzugrifffsfehler. Merke : Der Computer macht genau das, was du sagst, nicht das, was du meinst.
bis bald
akari