Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.12.2003, 00:31

schon wieder so ein undefinierbares problem

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];
}
}
};

2

18.12.2003, 19:08

Quellcode

1
2
DWORD            *m_current_frame; 
   DWORD            *m_current_anim;

Wieso sind das Zeiger?

An deinem Prinzip ist nichts Falsch. Wenn man mal von der Gross und Kleinschreibung absieht, die nicht immer ganz richtig ist und wenn man mal animmt das in

Quellcode

1
m_b[i].m_a = new A[m_b[i].m_num_a]; 
m_num_a ein gueltiger Wert steht.

Aber ohne Code kann ich dir nicht viel Helfen. Bei solchen Fehlern kann aber auch alles moegliche falsch sein. Benutz einfach deinen Debugger und schau was passiert.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

3

18.12.2003, 20:51

das sollten auch felder werden (new ....) war nur nicht wichtig für
das problem darum hab ichs weggelassen.

mein problem ja...wenn ich genau wüsste wo das problem liegt......
ich dachte halt es läge an daran, aber dann hab ich alles
in ein neues projekt und da gabs keine fehler.
wie gesagt, es traten andauernd neue fehler auf darum hab ich neu angefangen.

trotzdem danke.

Werbeanzeige