# Help with Runtime Error in my Code

I am getting a runtime error (SIGSEGV) on my code and I don’t know how to fix it. Please help. Thanks.

My Solution: http://www.codechef.com/viewsolution/3127090

My Code:

``````#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>

using namespace std;
typedef pair<int, int> Coord;
bool second_descend(const pair<int, int>& i, const pair<int, int>& j) {
if (i.second < j.second) return false;
if (j.second < i.second) return true;
return j.first < i.first;
}

float get_distance(Coord a, Coord b){
return sqrt(pow(b.first - a.first, 2) + pow(b.second - a.second , 2));
}

int main() {

int t, n;
Coord coordinate_template;
cin >> t;

while (t--){
vector<Coord> points;
cin >> n;
while (n--){
cin >> coordinate_template.first >> coordinate_template.second;
points.push_back(coordinate_template);
}

sort(points.begin(), points.end());

for (int a = 0; a < points.size()-2; a++){

if (points[a].first == points[a + 1].first){

int counter = a + 1;

while (points[counter].first == points[a].first){
counter++;
}

sort(points.begin() + a, points.begin() + counter, second_descend);

}

}
float sum = 0;
for (int a = 0; a < points.size()-1; a++){
sum += get_distance(points[a], points[a + 1]);
}
cout << floor(sum * 100 + 0.5) / 100 << endl;

}
return 0;
}``````

You counter variable brings the RTE here.
==>

`````` int counter = a + 1;

while (points[counter].first == points[a].first){
counter++;
}
``````

The memory located outside vector contains some garbage values but by coincidence if the memory location just outside vector and last index of vector contains same value counter will be increased to a value greater than the size of the vector. then sort function used here gives RTE.

``````                sort(points.begin() + a, points.begin() + counter, second_descend);
``````

You must limit the counter to vector size so while loop must be

``````while (counter < points.size() && points[counter].first == points[a].first){
counter++;
}
``````

The above correction is just to avoid RTE Im not sure about the correctness of your code

1 Like

`````` while (points[counter].first == points[a].first)
``while (counter < points.size() && points[counter].first == points[a].first)``