Überlauf im Prozess
-
Hallo,
ich initialisiere ein AnsiString Array global und möchte in der Funktion __fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner){} da drauf zugreifen, doch der CodeGuard gibt folgende Fehlermeldung aus:
Zugriff Überlauf im Prozess: ECTool.exe(3600) - I:\Programme\EC Tool\Unit1.cpp#1194
Versuch auf 40 Byte(s) bei 0x004BF220+8 zuzugreifen, das ist bei Offset 0+8 in block 0x004BF220(=ECTool.exe:0x02:000220), der nur 40 Byte lang ist.
0x0040BF9A - I:\Programme\EC Tool\Unit1.cpp#1194
0x00459EC7 - ..\..\Forms.pas#2947
0x00459A93 - ..\..\Forms.pas#2866
0x004BD563
0x00465418 - ..\..\Forms.pas#8179
0x004018B6 - ECTool.cpp#18Was mache ich falsch?
Hier ein Teil des Codes:AnsiString aEnde[5][2]={{"aasddda.exe","0"}, {"cdassay.exe","0"}, {"edasdaa0.exe","0"}, {"casddass.exe","0"}, {"mdasdaa.exe","0"}}; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { AnsiString tmp; tmp=aEnde[0][0]; tmp=aEnde[1][0]; ...Das Komische ist, dass ich auf das erste aEnde zugreifen kann aber es erst beim 2. einen Fehler verursacht, warum?
Was mache ich falsch??
-
was steht denn in Zeile 1194 von I:\Programme\EC Tool\Unit1.cpp? Darauf verweist der Codegard in seinem Fehlerlog, also sollte dort auch der Fehler oder der Auslöser sein...
-
Wie ichs schon sagte, dort erfolgt ein Zugriff auf ein Element aus dem AnsiString Array.
z.B. wie dieser Zugriff, wobei die 2. Zeile das Gleiche ist, wie in der Zeile 1194:
tmp=aEnde[0][0]; tmp=aEnde[1][0];Das komische ist ja, in der Zeile 1193 wird auf das Element aEnde[0][0] zugegriffen und das geht ohne Probleme aber sobald ich auf aEnde[1][0] oder aEnde[2][0] oder... zugreifen möchte, tritt der o.g. Fehler auf!
-
Hallo
Bist du dir sicher das du in der echten Zeile 1194 nicht doch einen dynamischen Index zum Zugriff auf das Array verwendest, und unabsichtlich die Arraygrenzen überschreitest? Da reicht es ja schon die Dimensionen zu vertauschen und mit [1][2] zuzugreifen.
bis bald
akari
-
Ja, ich bin mir da ganz sicher!
Dies hier ist in etwa genau das, was ich ebenfalls mache:
AnsiString aEnde[5][2]={{"aasddda.exe","0"}, {"cdassay.exe","0"}, {"edasdaa0.exe","0"}, {"casddass.exe","0"}, {"mdasdaa.exe","0"}}; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { AnsiString tmp; tmp=aEnde[0][0]; tmp=aEnde[1][0]; ...Diesen Code habe ich ebenfalls in meinem Progamm mal angewandt und es passiert genau das Gleiche!
Ich gehe aber mal davon aus, dass es an der Funktion und an dem globalen Array liegt, denn wenn ich das Array in der Funktion initialisiere, dann klappt das, doch ich brauche genau das Array global!
-
Stehen in tmp denn danach die richtigen Werte ("aasddda.exe" bzw. "cdassay.exe") drin?
-
...ich habe jetzt mal einfach die Zuweisung in einer for-schleife realisiert und siehe da der Fehler tritt, warum auch immer, nicht mehr auf!
Also das ist mir wirklich nen Rätzel...