Bha*_*ani -1 c++ segmentation-fault
I was solving the climbing leaderboard problem in hackerrank but my function gives segmentation fault.
vector<int> climbingLeaderboard(vector<int> scores, vector<int> alice) {
vector<int> res,i;
auto ip= unique(scores.begin(),scores.begin()+scores.size());
scores.resize(distance(scores.begin(),ip));
for(int i =0;i<alice.size();++i)
{
int curr =0;
while(alice[i]<=scores[curr]&&curr<scores.size())
++curr;
if(alice[i]==scores[curr-1])
res[i]=curr-1;
else if(alice[i]>scores[curr])
res[i]=curr;
else if(curr>scores.size()-1)
res[i]=curr;
}
return res;
}
Run Code Online (Sandbox Code Playgroud)
It gives the following error:
> Program terminated with signal SIGSEGV, Segmentation fault.
> #0 0x0000000000402a01 in climbingLeaderboard (scores=..., alice=...)
> at /usr/local/include/c++/8.3.0/bits/stl_vector.h:930 930 operator[](size_type __n) _GLIBCXX_NOEXCEPT
Run Code Online (Sandbox Code Playgroud)
Firstly, res[i] is accessed without allocating any elements in res.
vector<int> res should be vector<int> res(alice.size()).
Secondly, scores[curr] may be accessed before checking if curr<scores.size().
while(alice[i]<=scores[curr]&&curr<scores.size())
++curr;
Run Code Online (Sandbox Code Playgroud)
should be
while(curr<scores.size()&&alice[i]<=scores[curr])
++curr;
Run Code Online (Sandbox Code Playgroud)
and
else if(alice[i]>scores[curr])
res[i]=curr;
else if(curr>scores.size()-1)
res[i]=curr;
Run Code Online (Sandbox Code Playgroud)
should be
else if(curr>scores.size()-1)
res[i]=curr;
else if(alice[i]>scores[curr])
res[i]=curr;
Run Code Online (Sandbox Code Playgroud)