Obviously I'm searching the vector marks for a percentage of 83. This always gives me a runtime error, though. I don't see how it could try to read/write outside of the vector's memory since the loop won't run if it is at the start or end of the vector.
You are reinitializing lastCheckedLocation, take it out of the loop. What is happening right now is you are setting last checked to always be the beginning. Unless you want to always check against the beginning. What are you trying to do?
You do not have to store the last checked position because you are changing the search range each time. The program is crashing because find will return marks.end() if 83 can not be found and you are still calling cout << * iPerfectMark ...