[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.