During these several days, I have suffered from runtime errors while solving Baekjoon Online Judge problems.
Of course, I managed to solve them but I think it is useful to wrap up the reasons why I got runtime errors this time.
These are general cases that cause a runtime error.
The code refers to the spot out of the range of given arrays.
The size of a global array exceeds the size of the memory’s data section.
The size of a local array exceeds the size of the stack.
A number is divided by $0$.
The library itself triggers an exception.
Recursive calls become too deep.
The code refers to the already released memory section.
The main function returns a number which is not $0$.
I made two mistakes.
One case is that I misunderstood the problem so I declared the size of a vector smaller than that of the problem’s condition and the spot which is located out of the array was referred to.
And another case is that when I built a customized comparing function to use
sort, I used
The former is one of the cases I mentioned, so I will skip it.
Let’s focus on the latter.
This is the reference about the above error and honestly, I have no idea what this document is saying. For a simpler version, this is what I understood.
When sorting the values, the standard usually has a condition like this: As $a<b$, therefore “a” should come before “b”.
In other words, the statement that if $a<b$, this must not be $b<=a$ should be guaranteed to implement a proper sorting mechanism
. If one wants to include the “same” case and puts a sign of equality to inequality signs, the compiler understands the code like this: Both $a<b$ and $b<a$ are correct.
This is obviously a contradiction, so it triggers a runtime error.
Actually, I have seen that information somewhere but I just didn’t care about it that much.
Honestly, I didn’t expect to be blocked by this principle in problem-solving.
I’m learning a lot every day…