Da ich dieses kleine programm jedoch leserlicher/einfacher für anfänger schreiben wollte, habe ich es bewusst so hingebastelt. Jetzt im nachhinein, denke ich es ist doch verwirrender.
Es ist leider auch falsch und Ursache unmöglicher Bugs:
var vecPos[3] = {0,0,0};
vec_add(vecPos[1], vecSpeed[1]);
Dann überschreibst du vecPos[1], vecPos[2] und vecPos[3]. Letzterer Arrayeintrag existiert aber nicht, wie bereits gesagt, und du überschreibst damit das, was im Speicher hinter dem Array steht, bspw. ein Pointer, eine Variable, ...