Array nicht lesbar
-
Hallo!
Ich habe ein Problem und zwar definieren ich mit
int *s1; s1=new int[10]; int *s2; s2=new int[10]; int *s3; s3=new int[10]; int *a; a=new int[32];Variablen.
Ich fülle diese Variablen dann mit Werten. Wenn ich diese Werte allerdings später in OnDraw() abfragen will, kommt stürzt das Programm ab und Microsoft will einen Problembericht senden. Was mache ich falsch? Is vielleicht der Speicher überlastet? Wenn ja wie kann ich ihn wieder freikriegen?MFG
Danke
Hansi
-
an deinem code schnipsel sieht alles richtig aus
-
Also hiermit zeichne ich:
int i; i=1; CDC mem; mem.CreateCompatibleDC(pDC); while(i<11) { str.Format("%i",s1[i]); //MessageBox(str); hBitmap= (HBITMAP)::LoadImage(AfxGetInstanceHandle() ,"K\\"+str+".bmp" ,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); m_pBitmap.Attach(hBitmap); mem.SelectObject(&m_pBitmap); pDC->BitBlt(i*69,0,100,90,&mem,0,0,SRCCOPY); i++; }Bei jedem Durchlauf der Schleife kommt 2 mal "Debug Assertion Failed" beides mal in wingdi.cpp , in Zeile 1120 und in 1114.
MFG
Hansi
-
hmm dein arry index von S1 ist jab von null aus orientiert d.h. bei der array größe 10 ist der index 0-9, aber da du in deiner while schleife auf den array index >9 zugreiffst stürtz das progamm ab! "Index out of Bounds"
-
Also ich hab das jetzt umgeändert in 10 und in 32, aber das programm stürzt trotzdem nach dem 2. schleifendurchlauf ab, was mach ich denn nur falsch???
MFG
Hansi
-
änder mal das "while(..)" in "for(int i=0; i<10;i++)" um , und kommentier das "i++;" das "int i;" und "i=1"; aus deinem code!! wo ist hast du was auf 32 geändernt , in deiem code seh ich nur das du s1 nutzt!
-
Ich schätze mal dass das mit der ganzen Array Sache nixe nicht zu tun hat.
> m_pBitmap.Attach(hBitmap);
> mem.SelectObject(&m_pBitmap);Das in einer Schleife. Dafür bekommst du keine Punkte, musst an den Start zurück, und noch ne Runde aussetzen

Da ist aber einiges faul an dem Beispiel!
Schätze mal das ASSERT wird jenes sein:
ASSERT(m_hObject == NULL); // only attach once, detach on destroyDas findet sich in CGdiObject::Attach().
Heisst soviel wie: wenn du m_pBitmap.Attach(hBitmap) (nebenbei: "m_p" für was was kein Zeiger ist?) aufrufst, dann muss pBitmap vorher "leer" sein. Wenn du Attach vorher schon aufgerufen hast musst du Detach aufrufen bevor du wieder Attach verwenden kannst. Und bevor du Detach aufrufst musst du erstmal die CBitmap wieder aus dem DC rausselektieren. Dazu musst du dir nen Pointer auf die alte Bitmap die vorher selektiert war aufheben (SelectObject liefert diesen Poiner als Returnwert).
Dreh mal ein paar Runden in diversen MFC Tutorials, da fehlts noch an einigem. Gerade wo MFC wenns mal um DCs und Bitmaps und so zeug geht ziemlich schwierig ist. Gibt nen riesen Haufen Sachen die man beachten sollte, und einige Fallstricke.
-
Vielen Dank! Habs mitlerweile so gelöst, dass ich jeden Schleifendurchlauf ne neue Variable gemacht hab. Da passiert wahrscheinlich genau dasselbe schätze ich, aber danke für die Antwort! Jetz weiß ichs wenigstens fürs nächste mal!
MFG
Hansi