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
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.
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.
memset(myvector,0,sizeof(VECTOR));
schreibt also dahin wo myvector zeigt sizeof(VECTOR) (also wieder 12) 0en.
Du kannst das gleich auch mit
vec_set(myvector,nullvector);
oder mit
oder mit
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
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.
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? ;-)