You are dividing by zero.
Let's prove it.
I'll compile with warnings on, as well as an undefined behaviour sanitizer.
clang++-3.9 -std=c++1z -g -Weverything -fsanitize=undefined -o main t.cpp
warns:
main.cpp:16:12: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]
return {l2.p.x+l2.d.x*T1, l2.p.y+l2.d.y*T1};
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp:10:7: warning: no previous prototype for function 'findIntersection' [-Wmissing-prototypes]
Point findIntersection(Line l1, Line l2)
^
main.cpp:18:1: warning: control may reach end of non-void function [-Wreturn-type]
}
^
main.cpp:22:20: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]
case 0: return {r.p.x, r.d.y};
^~~~~~~~~~~~~~
main.cpp:25:20: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]
case 3: return {r.d.x, r.p.y};
^~~~~~~~~~~~~~
main.cpp:19:7: warning: no previous prototype for function 'getRectPoint' [-Wmissing-prototypes]
Point getRectPoint(Rect r, int n)
^
main.cpp:27:1: warning: control may reach end of non-void function [-Wreturn-type]
}
^
when we run it:
main.cpp:13:57: runtime error: division by zero
[1] 26614 floating point exception (core dumped) ./main
line 13:
T2 = (l2.d.x*(l1.p.y-l2.p.y) + l2.d.y*(l2.p.x-l1.p.x))/(l1.d.x*l2.d.y - l1.d.y*l2.d.x);