|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
struct key_frame
{
DWORD m_number;
char str;
vertex *m_vertices;
~key_frame();
key_frame(){};
};
class CFreakGeometry
{
friend class CFreakCharacter;
private:
//GEOMETRIE
//faces
DWORD m_number_vertices; //anzahl der vertizes
DWORD m_number_faces; //anzahl der faces
DWORD m_number_key_frames;
key_frame *m_key_frames;
face *m_faces;
DWORD m_fvf; //FVF
//TEXTURE
DWORD m_number_textures; //anzahl der texturen unused
//ANIMATION
DWORD m_number_animations; //anzahl der animation für dieses subojekt
protected:
public:
static DWORD m_instances; //aktuelle anzahl an instanzen
FREAKENGINE_API CFreakGeometry(); //std.constructor
FREAKENGINE_API ~CFreakGeometry(); //std.deconstructor
FREAKENGINE_API void Render(); //rendern
FREAKENGINE_API void SetFVF(DWORD); //fvf festlegen
//funktionen zum laden
FREAKENGINE_API feResult LoadFromFile(const char*);
};
class CFreakCharacter
{
private:
DWORD m_number_geometries;
CFreakGeometry *m_geometry;
//#transformations-variablen
float m_anglex;
float m_angley;
float m_anglez;
vector m_translate;
float m_scale;
anim_info *m_ais;
DWORD m_number_anims;
DWORD *m_current_frame;
DWORD *m_current_anim;
public:
static DWORD m_number_instances;
FREAKENGINE_API CFreakCharacter();
FREAKENGINE_API ~CFreakCharacter();
FREAKENGINE_API virtual feResult LoadFromFile(const char*);
FREAKENGINE_API virtual void Render();
FREAKENGINE_API void SetTranslate(vector);
};
|
so, ich hab die drei dinger, wobei das "finale" objekt folgendermaßen aufgebaut ist:
ein CFreakCharacter enthält x CFreakGeometry-objekte die wiederrum enthalten
jeweils y key_frame elemente.
das alles ist jeweils als xyz *m_XYZ = new xyz[m_number_xyz]; realisiert.
so weit so gut.
jetzt tritt beim löschen einer instanz von CFreakCharacter aber lustigerweise
mal wieder eine tolle access violation auf.
was mach ich eigentlcih schon wieder falsch? *heul*
ich brauch hilfe
so ein ähnliches problem hatte ich doch schon mal, dann wars auf einmal weg und nu isses wieder da.........ich verstehs einfach nicht.
das ist toll. wenn ich das programm ein paar mal hintereinander abstürzen lass,
dann sind meine 512 mb ram doch recht schnell voll. und irgendwann folgenden
dann sehr merkwürdige fehler. *g*
was ist denn bitte an folgenem prinizp falsch.?????
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
struct A
{
int a;
};
class B
{
uint num_a;
A* m_a;
B(){m_A = NULL;}
~B(){ if (m_A != NULL)delete [] m_A;}
};
class C
{
uint num_b;
B* m_b;
C(){m_b = NULL;}
~C(){ if(m_b!=NULL) delete [] m_b;}
void load()
{
......
.....
......
m_b = new B[m_num_b];
for(uint i=0; i<m_num_b; i++)
{
....
m_b[i].m_a = new A[m_b[i].m_num_a];
}
}
};
|