Probleme beim erzeugen eines Dynamischen Arrays
-
Hallo zusammen,
in meinem Programm erzeuge ich zur Laufzeit ein Dynamisches Array.
In der Klasse ist es als Private deklariert:
POINT* m_PointUeLuefter;In einer Funktion der Klasse soll die Größe festgelegt werden.
m_PointUeLuefter=new POINT[56];Beim Kompilieren kommt keine Fehlermeldung, aber beim Debbugen kommt folgende Meldung in einer Messagebox:
"First-change exception in Touch_Ausleger.exe: 0x80000002: Datatype Misalignment."Beim bestätigen mit OK springt der Debugger in folgenden Assembler Code (nur ein Ausschnitt):
03F9241C ldr r10, [sp] 03F92420 mov r8, #0 03F92424 ldr r3, [r7] 03F92428 mov r6, #0 03F9242C cmp r3, #0 03F92430 addeq r3, r5, #0x37 03F92434 biceq r3, r3, #0xF 03F92438 subeq r7, r3, #8 03F9243C add r3, r5, #0x37 03F92440 bic r11, r3, #0xF 03F92444 mov lr, r7 03F92448 ldr r3, [lr] 03F9244C b 03F92454 03F92450 ldr r3, [lr, +r3]! 03F92454 cmp r3, #0 03F92458 bgt 03F92450 03F9245C mov r1, lr 03F92460 mov r0, r5 03F92464 mov r4, lr 03F92468 bl 03F92170 03F9246C ldr r3, [r4] 03F92470 mov lr, r0 03F92474 rsb r2, r3, #0 03F92478 cmp r2, r9 03F9247C bge 03F92524der Fehler liegt wohl in Zeile
03F92450 ldr r3, [lr, +r3]!da hier der Debbuger stehen bleibt.
Wie kann ich das Problem umgehen? Kann es sein das die Adresse 0x80000002 für die Registry reserviert ist?
Gruß
spacehelix
-
spacehelix schrieb:
Wie kann ich das Problem umgehen? Kann es sein das die Adresse 0x80000002 für die Registry reserviert ist?
Ich denke nicht ...
Zeig mal ein bisschen mehr von deinem Code. Also die Stellen, in denen du mit dem Array hantierst. Denn auf den ersten Blick sieht das alles schlüssig aus, also liegt der Fehler woanders.
-
spacehelix schrieb:
Beim Kompilieren kommt keine Fehlermeldung
und die wäre vielleicht auch sinnvoll?!
-
Hi,
die Header sieht folgendermassen aus.
class CUEBERSICHTLUFT { // Memberfunctions public: CUEBERSICHTLUFT( ); ~CUEBERSICHTLUFT( ); void Init(); void DrawUebersicht(); private: void Init900_8(); POINT* m_PointUeLuefter; protected: };die Funktion sieht so aus:
void CUEBERSICHTLUFT::Init900_8() { m_Uebersicht.luefterBackgroundWidth=38; m_Uebersicht.luefterBackgroundHeight=48; m_Uebersicht.luefterBarHeight=40; m_Uebersicht.luefterBarWidth=5; m_Uebersicht.luefterBarLeft=4; m_Uebersicht.luefterBarTop=4; m_hBitmapLuefter=LoadBitmap(g_hInstance,MAKEINTRESOURCE(IDB_UE_L)); m_hBitmapBS=LoadBitmap(g_hInstance,MAKEINTRESOURCE(IDB_UE_BS)); m_PointUeLuefter=new POINT[56]; //Datatyp fehler wenn dies so gemacht wird. Warum?? //left top m_PointUeLuefter[0].x=300; m_PointUeLuefter[0].y=10; m_PointUeLuefter[1].x=343; m_PointUeLuefter[1].y=m_PointUeLuefter[0].y; m_PointUeLuefter[2].x=386; m_PointUeLuefter[2].y=m_PointUeLuefter[0].y; m_PointUeLuefter[3].x=429; m_PointUeLuefter[3].y=m_PointUeLuefter[0].y; m_PointUeLuefter[4].x=472; m_PointUeLuefter[4].y=m_PointUeLuefter[0].y; m_PointUeLuefter[5].x=515; m_PointUeLuefter[5].y=m_PointUeLuefter[0].y; m_PointUeLuefter[6].x=558; m_PointUeLuefter[6].y=m_PointUeLuefter[0].y; m_PointUeLuefter[7].x=601; m_PointUeLuefter[7].y=m_PointUeLuefter[0].y; m_PointUeLuefter[8].x=m_PointUeLuefter[0].x; m_PointUeLuefter[8].y=63; m_PointUeLuefter[9].x=m_PointUeLuefter[1].x; m_PointUeLuefter[9].y=m_PointUeLuefter[8].y; m_PointUeLuefter[10].x=m_PointUeLuefter[2].x; m_PointUeLuefter[10].y=m_PointUeLuefter[8].y; m_PointUeLuefter[11].x=m_PointUeLuefter[3].x; m_PointUeLuefter[11].y=m_PointUeLuefter[8].y; m_PointUeLuefter[12].x=m_PointUeLuefter[4].x; m_PointUeLuefter[12].y=m_PointUeLuefter[8].y; m_PointUeLuefter[13].x=m_PointUeLuefter[5].x; m_PointUeLuefter[13].y=m_PointUeLuefter[8].y; m_PointUeLuefter[14].x=m_PointUeLuefter[6].x; m_PointUeLuefter[14].y=m_PointUeLuefter[8].y; m_PointUeLuefter[15].x=m_PointUeLuefter[7].x; m_PointUeLuefter[15].y=m_PointUeLuefter[8].y; m_PointUeLuefter[16].x=m_PointUeLuefter[0].x; m_PointUeLuefter[16].y=116; m_PointUeLuefter[17].x=m_PointUeLuefter[1].x; m_PointUeLuefter[17].y=m_PointUeLuefter[16].y; m_PointUeLuefter[18].x=m_PointUeLuefter[2].x; m_PointUeLuefter[18].y=m_PointUeLuefter[16].y; m_PointUeLuefter[19].x=m_PointUeLuefter[3].x; m_PointUeLuefter[19].y=m_PointUeLuefter[16].y; m_PointUeLuefter[20].x=m_PointUeLuefter[4].x; m_PointUeLuefter[20].y=m_PointUeLuefter[16].y; m_PointUeLuefter[21].x=m_PointUeLuefter[5].x; m_PointUeLuefter[21].y=m_PointUeLuefter[16].y; m_PointUeLuefter[22].x=m_PointUeLuefter[6].x; m_PointUeLuefter[22].y=m_PointUeLuefter[16].y; m_PointUeLuefter[23].x=m_PointUeLuefter[7].x; m_PointUeLuefter[23].y=m_PointUeLuefter[16].y; m_PointUeLuefter[24].x=m_PointUeLuefter[0].x; m_PointUeLuefter[24].y=169; m_PointUeLuefter[25].x=m_PointUeLuefter[1].x; m_PointUeLuefter[25].y=m_PointUeLuefter[24].y; m_PointUeLuefter[26].x=m_PointUeLuefter[2].x; m_PointUeLuefter[26].y=m_PointUeLuefter[24].y; m_PointUeLuefter[27].x=m_PointUeLuefter[3].x; m_PointUeLuefter[27].y=m_PointUeLuefter[24].y; m_PointUeLuefter[28].x=m_PointUeLuefter[4].x; m_PointUeLuefter[28].y=m_PointUeLuefter[24].y; m_PointUeLuefter[29].x=m_PointUeLuefter[5].x; m_PointUeLuefter[29].y=m_PointUeLuefter[24].y; m_PointUeLuefter[30].x=m_PointUeLuefter[6].x; m_PointUeLuefter[30].y=m_PointUeLuefter[24].y; m_PointUeLuefter[31].x=m_PointUeLuefter[7].x; m_PointUeLuefter[31].y=m_PointUeLuefter[24].y; m_PointUeLuefter[32].x=m_PointUeLuefter[0].x; m_PointUeLuefter[32].y=222; m_PointUeLuefter[33].x=m_PointUeLuefter[1].x; m_PointUeLuefter[33].y=m_PointUeLuefter[32].y; m_PointUeLuefter[34].x=m_PointUeLuefter[2].x; m_PointUeLuefter[34].y=m_PointUeLuefter[32].y; m_PointUeLuefter[35].x=m_PointUeLuefter[3].x; m_PointUeLuefter[35].y=m_PointUeLuefter[32].y; m_PointUeLuefter[36].x=m_PointUeLuefter[4].x; m_PointUeLuefter[36].y=m_PointUeLuefter[32].y; m_PointUeLuefter[37].x=m_PointUeLuefter[5].x; m_PointUeLuefter[37].y=m_PointUeLuefter[32].y; m_PointUeLuefter[38].x=m_PointUeLuefter[6].x; m_PointUeLuefter[38].y=m_PointUeLuefter[32].y; m_PointUeLuefter[39].x=m_PointUeLuefter[7].x; m_PointUeLuefter[39].y=m_PointUeLuefter[32].y; m_PointUeLuefter[40].x=m_PointUeLuefter[0].x; m_PointUeLuefter[40].y=275; m_PointUeLuefter[41].x=m_PointUeLuefter[1].x; m_PointUeLuefter[41].y=m_PointUeLuefter[40].y; m_PointUeLuefter[42].x=m_PointUeLuefter[2].x; m_PointUeLuefter[42].y=m_PointUeLuefter[40].y; m_PointUeLuefter[43].x=m_PointUeLuefter[3].x; m_PointUeLuefter[43].y=m_PointUeLuefter[40].y; m_PointUeLuefter[44].x=m_PointUeLuefter[4].x; m_PointUeLuefter[44].y=m_PointUeLuefter[40].y; m_PointUeLuefter[45].x=m_PointUeLuefter[5].x; m_PointUeLuefter[45].y=m_PointUeLuefter[40].y; m_PointUeLuefter[46].x=m_PointUeLuefter[6].x; m_PointUeLuefter[46].y=m_PointUeLuefter[40].y; m_PointUeLuefter[47].x=m_PointUeLuefter[7].x; m_PointUeLuefter[47].y=m_PointUeLuefter[40].y; m_PointUeLuefter[48].x=m_PointUeLuefter[0].x; m_PointUeLuefter[48].y=328; m_PointUeLuefter[49].x=m_PointUeLuefter[1].x; m_PointUeLuefter[49].y=m_PointUeLuefter[48].y; m_PointUeLuefter[50].x=m_PointUeLuefter[2].x; m_PointUeLuefter[50].y=m_PointUeLuefter[48].y; m_PointUeLuefter[51].x=m_PointUeLuefter[3].x; m_PointUeLuefter[51].y=m_PointUeLuefter[48].y; m_PointUeLuefter[52].x=m_PointUeLuefter[4].x; m_PointUeLuefter[52].y=m_PointUeLuefter[48].y; m_PointUeLuefter[53].x=m_PointUeLuefter[5].x; m_PointUeLuefter[53].y=m_PointUeLuefter[48].y; m_PointUeLuefter[54].x=m_PointUeLuefter[6].x; m_PointUeLuefter[54].y=m_PointUeLuefter[48].y; m_PointUeLuefter[55].x=m_PointUeLuefter[7].x; m_PointUeLuefter[55].y=m_PointUeLuefter[48].y; }Der Fehler passiert nur wenn ich das Array Dynamisch erzeuge und auch genau an der Position. Erzeuge ich das Arrya statisch (POINT m_PointUeLuefter[56]; ) dann funktionierts.
Gruß spacehelix
-
Poste doch bitte mal die Kompilermeldung, denn eigentlich sieht es halbwegs in ordnung aus was das dynamische erzeugen angeht
-
Hi,
was für eine Meldung meinst du?
beim Kompilieren erscheint keine Fehlermeldung. Nur beim Ausführen.
Ich programmiere dies für ein Windows CE Sytem. In der Entwicklungsumgebung (eVC++) ist ein Windows CE emulator auf dem läufts. Nur wenn ich es auf der Hardware Debuggen möchte kommt die im ersten Posting angegebene Fehlermeldung.
An anderen Stellen im Programm erzeuge ich auch Dynamische Arrays, dort funktioniert es.
Gruß
spacehelix
-
Ui, wie war das noch gleich?
Erst Google und dann Forum ... stimmts!?Gleich der erste Link:
http://support.microsoft.com/?scid=kb%3Ben-us%3B909973&x=9&y=22Und dass du für CE programmierst hättest du uns auch gleich am Anfang mitteilen können

-
Hi,
danke für den Link hat geholfen jetzt funktioniert es.
Das ich für Windows CE Programmiere schreibe ich nicht sofort, da ich feststellen musste, dass die meisten davon abgeschreckt werden und dann Fragen nicht beantworten, weil sie denken das die Windows CE Welt anders aussieht. Ist aber in nur ganz wenigen fällen so.
Gruß
spacehelix