# [ACCEPTED]-sort function C++ segmentation fault-segmentation-fault

In C++, your `compare`

predicate must be a strict weak ordering. In 6 particular, `compare(X,X)`

must return "false" for 5 any X. In your compare function, if both 4 pairs are identical, you hit the test `(p1.first <= p2.first)`

, and 3 return `true`

. Therefore, this `compare`

predicate does 2 not impose a strict weak ordering, and the 1 result of passing it to `sort`

is undefined.

Try using all the values from `n = 32766`

up to `32770`

. I 11 suspect you'll find that you are experiencing 10 some sort of overflow. This is because 2^15 9 (32768) is the biggest number that can be 8 represented using 16 bits (assuming you 7 also allow negative numbers). You will have 6 to use a different data type.

**Suggestion:**

Get it to output 5 the vector's maxsize:

```
cout << p.max_size();
```

Let us know what that 4 does. All things being normal, I'd expect 3 it to be in the hundreds of millions (536870911 2 on my computer). But if it's more like 32768, then 1 that could be the problem.

Your overflow is possibly related to the 9 stack overrun due to passing two vectors 8 by value.

**std::vector &vec** - this is how you pass a vector 7 by reference.

Change
`bool compare(pair<int,int> p1,pair<int,int> p2)`

to `bool compare(pair<int,int> &p1,pair<int,int> &p2)`

If you think this 6 through, passing by reference will change 5 the size of stack data from size `(2*n*4)*2`

bytes 4 to `2x8`

byte pointers

For `n == 32767`

you are reducing the 3 stack frame by approx `(2*32767*4)*2`

As a rule of thumb, pass 2 by reference unless your design requires 1 otherwise.

More Related questions

We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.