Gamestudio Links
Zorro Links
Newest Posts
New FXCM FIX Plugin
by flink. 06/04/24 07:30
AlpacaZorroPlugin v1.3.0 Released
by kzhao. 05/22/24 13:41
Free Live Data for Zorro with Paper Trading?
by AbrahamR. 05/18/24 13:28
Change chart colours
by 7th_zorro. 05/11/24 09:25
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
0 registered members (), 1,490 guests, and 9 spiders.
Key: Admin, Global Mod, Mod
Newest Members
AemStones, LucasJoshua, Baklazhan, Hanky27, firatv
19058 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 2 of 2 1 2
Re: Vector* Pointer Problem [Re: maslone1] #236528
11/14/08 17:49
11/14/08 17:49
Joined: Jul 2007
Posts: 424
EUROPE
maslone1 Offline OP
Senior Member
maslone1  Offline OP
Senior Member

Joined: Jul 2007
Posts: 424
EUROPE
...... WOOOOOOW MAN!!!!!

Das funktioniert ja wie geschmiert!

Jetzt bist du glatte 2 Plätze nach oben gerutscht (in der Hero-Reihung -> Platz 1).

Danke nochmals!

Wenn du eventuell so gütig wärst mir kurz zu beschreiben was es mit memset() und free() auf sich hat.

Klar, initialisieren.... aber was machen diese beiden funktionen im detail??

thanx a lot
Marcel


A8c, Blender, FlStudio, Unity3d
Re: Vector* Pointer Problem [Re: maslone1] #236533
11/14/08 18:48
11/14/08 18:48
Joined: Jan 2002
Posts: 4,225
Germany / Essen
Uhrwerk Offline
Expert
Uhrwerk  Offline
Expert

Joined: Jan 2002
Posts: 4,225
Germany / Essen
Also wenn Du VECTOR* schreibst definierst Du damit einen Pointer auf einen Vektor. Mehr nicht. Der Pointer zeigt irgendwo hin, also mit Sicherheit irgendwo dahin wo er besser nicht hinzeigen sollte. Daher sollte man Pointer immer initialisieren. Zum Beispiel mit
Code:
VECTOR* myvector = NULL;

Jetzt hast Du also einen Pointer der auf NULL zeigt. Jetzt hätte man ja aber gerne einen Pointer, der auf was Sinnvolles zeigt, also einen Vektor, den man dann auch verwenden kann. Dafür ist malloc da. Mallox reserviert so viele Bytes auf dem Heap, wie Du als Parameter übergibst. Jetzt hättest Du ja gerne soviel Speicher, wie ein Vektor benötigt. Das sind 12 Bytes. Da es aber nicht unbedingt bequem ist die Byte Größe von allen möglichen Datentypen im Kopf zu haben kann man hier den sizeof Opereator benutzen. Der gibt die Größe des übergebenen structs in Bytes zurück.
Code:
VECTOR* myvector = malloc(sizeof(VECTOR));

gibt also einen Pointer zurück, der auf soviele freie Bytes auf dem Heap zeigt, wie Vektor groß ist. Nächstes Problem: Was an der Speicherstelle mit den 12 Bytes, die Du jetzt reserviert hast steht ist rein zufällig. Deswegen sollte man den allokierten Speicher initialisieren. memset schreibt schreibt an die Stelle des ersten Parameters soviele Bytes wie im dritten Parameter angegeben. Geschrieben wird jeweils der zweite Parameter.
Code:
memset(myvector,0,sizeof(VECTOR));

schreibt also dahin wo myvector zeigt sizeof(VECTOR) (also wieder 12) 0en.
Du kannst das gleich auch mit
Code:
vec_set(myvector,nullvector);

oder mit
Code:
vec_fill(myvector,0);

oder mit
Code:
myvector->x = 0;myvector->z = 0;myvector->y = 0;

erreichen, memset ist aber die schnellste Variante.

Bleibt noch free übrig. Wenn Du den Vektor nicht mehr brauchst und die entsprechende Funktion verlässt, kannst Du myvector ja nicht mehr ansprechen weil Du den Gültigkeitsbereich der Variablen verlässt. Die 12 reservierten Bytes lungern aber trotzdem noch im Hauptspeicher rum, obwohl Du sie nicht mehr gebrauchen kannst. Das nennt man ein "Memory Leak". Mit free(myvector); erreichst Du, dass die 12 Bytes wieder zurück an das Betriebssystem übergeben werden und dann wieder als freier Speicher gelten. Danach darfst Du sie nicht mehr benutzen, versteht sich.

Eine noch einfachere Lösung ist einfach
Code:
VECTOR myvector;

zu schreiben. Dann kannst Du dir malloc und free sparen, allerdings landet der von dem Vektor reservierte Speicher auf dem Stack und nicht mehr auf dem Heap, was meistens ungünstiger ist. Einfach mal bei Bedarf nach Heap + Stack googlen.

Quote:
Jetzt bist du glatte 2 Plätze nach oben gerutscht (in der Hero-Reihung -> Platz 1).

*lol* Ich glaub ich mach nen Screenshot und nehm das als Desktop Hintergrund. Besser als Spiderman, wie cool ist das denn? ;-)


Always learn from history, to be sure you make the same mistakes again...
Re: Vector* Pointer Problem [Re: Uhrwerk] #236535
11/14/08 19:03
11/14/08 19:03
Joined: Jul 2007
Posts: 424
EUROPE
maslone1 Offline OP
Senior Member
maslone1  Offline OP
Senior Member

Joined: Jul 2007
Posts: 424
EUROPE
Sag ich doch, den Platz Nr. 1 hast du dir eindeutig verdient!

Du hast es jetzt so gut erklärt, dass selbst so'n Blödi wie ich es kapiert hat wink

Vielen vielen Dank! Jetzt sieht mein Code gleich viel besser aus, danke dir!!!!


A8c, Blender, FlStudio, Unity3d
Page 2 of 2 1 2

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1