wenn ich mit new ein Feld (Größe ~3600) Einträge (a 32 Byte) beantrage geht das beim ersten mal gut. Später brauche ich ein zweites Feld(~7100 Einträge a 32 Byte). Compile, Link, Build alles kein Problem. Bei der Ausführung bricht er jedoch, genau bei der Speicherreservierung ab. Der Aufruf-Stack ist von new über malloc bis in die KERNEL vorgedrungen und dann geht nix mehr.
"Unhandled Exception in ... (KERNEL32.DLL) 0x0000005 Access Violation"
int i = 3600;
Point* t;
t = new Point[i];
...
i = 7100;
Point* g;
g = new Point[i]; // hier passierts
Speicher hab ich noch genug (mit GlobalMemoryStatus getestet)
kann mir jemand helfen? Welche gründe kann eine Access Violation haben?
Danke fürs lesen,
Dreamforger
Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge
Ich habs versucht, "dummerweise" funktioniert's in kleineren Projekten. Und den ganzen Code hier zu posten ist übertrieben.
Vieleicht liegt das Problem auch in Nicht dokumentierten eigenschaften von new.
Ich benutze new
- in einer Win32 Anwendendung (int WINAPI WinMain....)
ohne Nachrichten schleife (App läuft nur einmal durch)
- um ein Feld von Klassen zu erzeugen (t)
- um ein Feld von D3DVERTEX Strukturen zu erzeugen (g)
die Daten aus t werden in g umgespeichert, (by Value nicht by Name)
und t wird freigeben.
Jenachdem in welcher Reihenfolge die (unabhängigen) Code - Blöcke stehen
- versagt D3DVERTEX* g= new D3DVERTEX[7100];
- versagt der Zugriff auf g[>7000]
- versagt delete[] g;
liegt das an besonderen Eigenschaften von D3DVERTEX? offiziel wird der operator new nicht bezüglich D3DVERTEX geändert (Dx7 SDK). Die structure sollte also wie alle anderen auch Instantiierbar sein, oder.
Dreamforger
TranslateMessage();
PostMessage( woelfer, WM_THANX, dw_MAX, dw_MAX);