17 may
2019

## Line 933: Char 34: runtime error: reference binding to null pointer of type 'struct value_type' (stl

I tried to solve Leetcode Problem 54 - spiral and got stuck in empty vector input.

the question is about spiral list. input is 2d vector and output should be vector list which written by spiral direction.

``````Input:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]
``````

problem is when input is empty list.

``````Input: []
``````

it produces runtime error.

another testcases passed except empty input like [] .

It seems no runtime error during testing in my mac OSX terminal, but Leetcode says

'Line 933: Char 34: runtime error: reference binding to null pointer of type 'struct value_type' (stl_vector.h) '

Also I attach codes below ...

``````class Solution {
public:

int left = 0, right = 0;
vector spiralOrder(vector>& matrix) {
if(matrix.size()<1) return {};
vector> flag(matrix.size(),vector(matrix.size(),0));
while(1){
flag[left][right] =1;

if(right+1=0 && flag[left][right-1]==0){
--right;
continue;
}
else if(left-1>=0  && flag[left-1][right]==0){
--left;
continue;
}
else break;
}
}
};
``````

#### COMENTARIOS #### jay1234

Thanks for comments, I figure out how to solve this one myself. I changed

``````if(matrix.size()<1
``````

to

``````if(matrix.empty()) return {};
``````

and it worked. Also I found my algorithm was wrong and fixed it.

``````    using namespace std;

enum class Direction{
RIGHT,
DOWN,
LEFT,
UP
};
class Solution {
public:
Direction direc;
int left = 0, right = 0;
vector<int> spiralOrder(vector<vector<int>>& matrix) {
Direction direc = Direction::RIGHT;
if(matrix.empty()) return {};
vector<vector<int>> flag(matrix.size(),vector<int>(matrix.size(),0));

while(1){
flag[left][right] =1;
switch(direc){
case Direction::RIGHT:
if(right+1<matrix.size() && flag[left][right+1] == 0){
++right;
continue;
}
else if(left+1<matrix.size() && flag[left+1][right] == 0 ){
++left;
direc = Direction::DOWN;
continue;
}
else break;
case Direction::DOWN:
if(left+1<matrix.size() && flag[left+1][right] == 0 ){
++left;
continue;
}
else if(right-1>=0 && flag[left][right-1]==0){
--right;
direc = Direction::LEFT;
continue;
}
else break;
case Direction::LEFT:
if(right-1>=0 && flag[left][right-1]==0){
--right;
continue;
}
else if(left-1>=0  && flag[left-1][right]==0){
--left;
direc = Direction::UP;
continue;
}
else break;
case Direction::UP:
if(left-1>=0  && flag[left-1][right]==0){
--left;
continue;
}
else if(right+1<matrix.size() && flag[left][right+1] == 0){
++right;
direc = Direction::RIGHT;
continue;
}
else break;
}
break;
} // switch-case